Selenium assertFalse因staleelementreferenceexception而失败

时间:2018-03-12 09:18:53

标签: selenium selenium-webdriver testng assertion staleelementreferenceexception

我在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毫秒就够了。 在断言之前等待是否典型? 还有另一种解决方法吗? (隐含的等待在这里没有帮助) 来自德国的问候!

2 个答案:

答案 0 :(得分:1)

当您在assertFalse()函数中遇到 staleelementreferenceexception 时,为了否定FalsePossitive用例,您可以使用ExpectedConditions子句诱导 WebDriverWait assertTrue()函数中设置为stalenessOf,如下所示:

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(条件)

如果您仍想实施{{>} assertFalse(condition) 提出错误FalsePossitive案例,您仍然可以:

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

答案 1 :(得分:0)

我认为,超时未设置为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; }