我正在使用Selenium测试在firefox浏览器上运行的应用程序,有时当我想点击Selenium的按钮时,它只是找不到它 . 我发现这很奇怪,因为我可以用眼睛看到元素 . 我已经尝试了多种方法,适用于其他例子:
-
wait.until(ExpectedConditions.visibilityOfElementLocated(by))
-
wait.until(ExpectedConditions.presenceOfElementLocated(by)); (我在路径变量中使用xpath,我确信他是正确的)
-
在驱动程序上设置implictlyWait
-
放置Thread.sleep(1000)
然后,我在这里发布,因为我不明白为什么Selenium看不到浏览器上显示的元素 . 一个重要的信息可能会帮助你给我一个正确的答案是html DOM是由javascript事件触发的websocket动态生成的 .
编辑1:
<button type="button" class="btn btn-xs btn-block btn-stroke" id="252_button">
Delete
</button>
我想要访问的元素 . 我使用xpath来做到这一点 .
它不在iframe元素中 .
要访问一个元素我做了这个应该找到并单击它的方法,给出参数中的xpath:
public void findAndClick(String xpath) {
By by = By.xpath(xpath);
//wait.until(ExpectedConditions.presenceOfElementLocated(by));
wait.until(ExpectedConditions.visibilityOfElementLocated(by));
driver.findElement(by).click();
}
编辑2:
这里是特定的xPath:// div [2] / div / div / div /按钮我发现它使用的是Selenium插件 .
编辑3:
我得到的例外是
StaleReferenceElementException:在缓存中找不到元素 - 也许页面在查找后发生了变化 .
我去了解释这个例外的page,它说:
The element has been deleted entirely.
The element is no longer attached to the DOM.
但它不可能,因为我可以看到它并手动点击它 .
1 回答
我想我找到了我的问题的解释,我读了关于the StaleReferenceException的文件 . 更准确地说,在这部分:
我想我是在同一个案例中,因为这正是我在webElement的引用上使用一个方法(getText(),getTag())我有这个异常,即使这个元素仍然是图形可见的 . 据我了解,我尝试访问一个不再附加到DOM的引用,因为DOM已经更改 .