java - 带 Java 的 Selenium WebDriver : How to wait for specific element to be visible located by multiple By objects?

标签 java ajax selenium

我为 AJAX 应用程序编写了 selenium 测试,为了使其运行稳定,我使用了显式等待。如果我使用单个 by 来定位我的元素,这将正常工作,如下所示:

WebDriverWait wait = new WebDriverWait(getDriver(), 50);
wait.ignoring(StaleElementReferenceException.class);
wait.ignoring(NoSuchElementException.class);
wait.ignoring(InvalidElementStateException.class);

By by = By.cssSelector("button");

wait.until(ExpectedConditions.elementToBeClickable(by));
getDriver().findElement(by).click();

但是我想等待一个可点击的元素,它是由多个 bys 定位的,如下所示:

WebElement element = getDriver().findElement(By.cssSelector("form")).findElement(By.cssSelector("button"));
ExpectedConditions.elementToBeClickable(element);

找到元素的第一行容易出现竞争条件,并且无法像使用单个 By 定位那样工作。我考虑过在单个 By 中连接 By 对象,但是我同时使用 XPath 和 CSS 选择器来定位我的元素,所以这不是一个选项。使用 XPath,因为我匹配包含 CSS3 不支持的文本。

是否可以复制第一个示例的行为,同时仍然能够使用多个 By 对象定位元素?

最佳答案

您正在使用 CSS 选择器,您不需要使用多个 findElement()。

您可以在同一个选择器中完成所有操作。您应该能够使用 CSS 选择器完成 XPath 所能做的一切。

 getDriver().findElement(By.cssSelector("form button"))

关于java - 带 Java 的 Selenium WebDriver : How to wait for specific element to be visible located by multiple By objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37790744/

相关文章:

java - REST API - 返回具有不同数据的资源列表

java - 为什么在 Graphics2D 中绘制旋转/环绕文本如此困难?

java - 我正在使用在服务器 1 上运行的 demo1.jsp 中的 DOM 生成 XML,并希望将该 XML 文件发送到在服务器 2 上运行的 demo2.jsp

java - 为什么使用 .getSource() 方法时将 ChangeEvent 对象转换为 JSlider?

javascript - 如何使用 JsTestDriver 测试 jquery 和 ajax 调用?

javascript - 用于财务报告的 jQuery 插件?

javascript - Jquery Ajax 函数 setInterval - 控制台错误

java - 将子元素添加到 Selenium 的 html 中后,在页面对象中找不到子元素

python - 如何使用 Selenium Python 单击 https ://www. tempinbox.xyz/mailbox/username@domain.name 中的验证消息和按钮

java - Windows Firefox 和 MAC chrome 最大化命令不起作用