我为 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/