一尘不染

Selenium assertFalse失败,并带有staleelementreferenceException

selenium

我用Java进行了selenium测试,并且正在做一些断言:

assertFalse(isElementPresent(By.xpath("//td[2]/div")));

private boolean isElementPresent(By by) {
try { driver.findElement(by); return true; }
catch (NoSuchElementException e) { 
return false; }

这是Selenium从IDE导出到Java Webdriver时生成的标准方法。

(是的,我想断言该元素不存在)

在上述代码行中进行测试时,我总是会收到错误消息:错误的元素引用:元素未附加到DOM

但是,当我在该步骤之前放置一个thread.sleep时,它可以工作。我没有得到的事实是,等待1毫秒就足够了。在断言之前等待通常吗?还有另一种解决方法吗?(明显的等待无济于事)来自德国的问候!


阅读 292

收藏
2020-06-26

共1个答案

一尘不染

当你面对 staleelementreferenceexception
assertFalse()功能,否定FalsePossitive用例可以诱发
WebDriverWait
ExpectedConditions

条款设置为
stalenessOf
内的assertTrue()功能如下:

Assert.assertTrue(new WebDriverWait(driver, 20).until(ExpectedConditions.stalenessOf(driver.findElement(By.xpath("//td[2]/div")))));

讲解

ExpectedConditions 条款 stalenessOf
将检查确定为元素的陈旧(By.xpath("//td[2]/div"))。当预期的元素过时时,您可以检查assertTrue(boolean condition)assertTrue()会断言条件为真。如果不是,则会引发 AssertionError

assertFalse(条件)

如果您仍然想实现引发 错误*
FalsePossitive情况,您仍然可以:
assertFalse(condition)
*

Assert.assertFalse(new WebDriverWait(driver, 20).until(ExpectedConditions.stalenessOf(driver.findElement(By.xpath("//td[2]/div")))));
2020-06-26