Selenium assertFalse 因 staleelementreferenceexception 而失败



我在Java中有一个硒测试,我正在做一些这样的断言:

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 毫秒就足够了。在断言之前等待是典型的吗?有没有其他方法可以解决这个问题?(隐式等待在这里无济于事(来自德国的问候!

由于您在assertFalse()函数中面临 staleelementreferenceexception,为了否定 FalsePossitive 用例,您可以在函数中将 WebDriverWaitExpectConditions 子句设置为 stalenessOf assertTrue()如下所示:

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

解释

预期条件子句 staleness Of 将检查标识为 (By.xpath("//td[2]/div")) 的元素的过期性。当预期的元素过时时,您可以检查assertTrue(boolean condition)assertTrue()会断言一个条件是真的。如果不是,则会引发断言错误

断言假(条件(

如果您仍然想实现assertFalse(condition)引发错误的 FalsePossitive 案例,您仍然可以:

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

我认为,超时没有设置为WebDriver。 试试这个

assertFalse(isElementPresent(By.xpath("//td[2]/div")));
private boolean isElementPresent(By by) {
driver.timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
try { driver.findElement(by); return true; }
catch (NoSuchElementException e) { 
return false; }

相关内容

  • 没有找到相关文章

最新更新