我正在使用chromedriver并尝试找到弹出窗口中的按钮。
当我尝试使用xpath时,它只会在IE上返回它。
所以我尝试使用类名,然后循环所有按钮,找到文本“OK”的按钮。 我从b.getText()命令得到了异常“org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素没有附加到页面文档” 我看到按钮被点击了。
List<WebElement> all = Test1.driver.findElements(By
.className("btn-primary"));
for (WebElement b : all) {
if (b.getText().trim().equals("OK")) {
b.click();
break;
}
}
答案 0 :(得分:0)
我想,可能还有另一个'Ok'-button被chromedriver点击了? Chromedriver比IEdriver快,因此可能存在StaleElementReferenceException,即使Iedriver中没有Exception也是如此。 http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp
我建议向后退一步。如果findElements与'By.className'一起使用,那么它也应该与'By.xpath'一起使用。你提到过,按钮是生成的,那么你是否已经使用了明确的或隐含的waitmethods? IEDriver可能足够慢,但chromedriver可能是快速的方式,所以chromedriver没有找到按钮,因为它根本不是在dom中喷射。 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits
对于你的情况,我建议'visibilityOf' - 条件: https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#visibilityOf(org.openqa.selenium.WebElement)
我希望这有帮助,如果没有,请不要犹豫,进一步询问。