我试图让Selenium等待页面加载后动态添加到DOM的元素。试过这个:
fluentWait.until(ExpectedConditions.presenceOfElement(By.id("elementId"));
如果有帮助,这里是fluentWait
:
FluentWait fluentWait = new FluentWait<>(webDriver) {
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(200, TimeUnit.MILLISECONDS);
}
但是它抛出一个NoSuchElementException
-看起来像presenceOfElement
期望元素存在,所以这是有缺陷的。这一定是Selenium的面包和黄油,不想重新发明轮子……有人能建议一种替代方法Predicate
吗,理想情况下不用自己动手做?
需要等待ignoring
时,您需要异常调用以忽略WebDriver
。
FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(200, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
有关更多信息,请参见FluentWait的文档。但是请注意,此条件已在ExpectedConditions中实现,因此您应该使用
WebElement element = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
*更新为更新版本的Selenium:
withTimeout(long, TimeUnit) has become withTimeout(Duration)
pollingEvery(long, TimeUnit) has become pollingEvery(Duration)
因此,代码将如下所示:
FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(30)
.pollingEvery(Duration.ofMillis(200)
.ignoring(NoSuchElementException.class);
等待的基本教程可以在这里找到。
问题内容: 我正在测试一个UI,在该UI中用户单击“删除”按钮,而表条目消失。因此,我希望能够检查表条目是否不再存在。 我曾尝试使用invert ,希望它的意思是“期望不存在指定的元素”。我的代码是这样的: 但是,我发现即使这样做,我也因一个说法说元素“ foo”不存在。当然,我想要的是没有这样的元素,但是我不希望引发异常。 那么,如何等待直到元素不再存在?我希望有一个示例,该示例尽可能不依赖于捕
问题内容: 我试图让Selenium等待页面加载后动态添加到DOM的元素。试过这个: 如果有帮助,这里是: 但是它抛出一个-看起来像期望元素存在,所以这是有缺陷的。这一定是Selenium的面包和黄油,不想重新发明轮子……任何人都可以提出其他选择,理想情况下不用自己动手做? 问题答案: 需要等待时,您需要异常调用以忽略。 有关更多信息,请参见FluentWait文档。但是请注意,此条件已经在Exp
问题内容: 我正在开发Chrome中的扩展程序,但我想知道:找出元素何时存在的最佳方法是什么?使用纯JavaScript,间隔检查直到元素存在,或者jQuery是否有一些简单的方法来执行此操作? 问题答案: 由于性能问题,不建议将其与其他DOM突变事件一起弃用- 推荐的方法是使用MutationObserver来监视DOM。不过,只有新的浏览器才支持此功能,因此您应该在不可用时退回。
问题内容: 我想检查Selenium中是否存在一个元素,如果存在,请将其分配给一个名称。 现在,我有这样的东西: 但是,当不存在值为9的元素时,它将返回错误。有没有一种方法可以检查它是否存在,或者类似的东西? 问题答案: 有几种选择。我推荐这些。 1.创建方法或Web驱动程序扩展。 2.计算元素,如果有1个或更多元素,则获取它。 那你可以检查
我正在尝试在使用VueJs的单页应用程序中开发一个自动化测试,当我单击注册按钮时,页面加载了一个包含元素的表单,但是由于元素根据需要加载,它们不会自动出现在那里,我可以解决在单击注册按钮后放置driver.sleep的问题,但我正在寻找一种解决方法,我尝试了InluductEts和elisEnabled,但我无法得到结果,在这里检查我的代码: const { Builder, By, Key, 直
问题内容: 单击特定按钮时-我的测试站点将打开模式窗口。 但是模式窗口的打开是不同的 两者都有不同的标题,不同的选项和不同的位置。现在我应该等到模态。 是否可以等到任一模态窗口(WebElement)可见? 我已经在WebDriverWait方法中进行搜索,但是所有方法都必须等到特定WebElement可见或可单击为止。 我找不到更好的方法来等到任何一个都可见。 您能提出一种解决这种情况的方法吗?