编辑:由于链接的问题都未解决此问题,也未使用Javascript,因此不确定为什么将其标记为已回答。我正在寻找一种捕获此错误的方法,而不是防止它发生,因为invisibilityOfElementLocated之类的方法在Javascript版本中不可用。
我有一个网站,我正在设置一些有关使用nodeJS,Selenium和Mocha的基本自动化测试。首次打开站点时,用户单击一个框并关闭欢迎消息(此处为“ elemId”),然后不再在DOM中呈现该消息。在开始实际测试之前,我需要检查它是否不存在,但是尽管使用了stalenessOf,但我经常会收到硒错误NoSuchElementError。如果我可以捕获并忽略此异常,那么这将不是问题,但是不幸的是捕获它似乎没有用。下面是有问题的代码和我收到的错误消息。
// Check it no longer exists before moving on
driver.wait(until.stalenessOf(driver.findElement(By.id('elemId'))))
.then(null, function(err) {
// Sometimes this throws an error even though the element is stale
// Using this syntax should catch the error, as it is a selenium error, not a javascript error
console.log('Threw error but that is acceptable');
})
NoSuchElementError:没有这样的元素:无法找到元素:{“ method”:“ css选择器”,“ selector”:“ * [id =” elemId“]”}
答案 0 :(得分:0)
在调用stalenessOf之前发生异常。
代码
ReactDOM.render(<App />, document.getElementById("root"));
将生成异常NoSuchElementFound。
方法失效时间:
stalenessOf方法没有按照您认为的去做。
该方法期望该元素存在并且将等待直到引发StaleElementException为止。意味着该元素存在,但随后可以刷新或从DOM中删除。
尝试使用方法invisibilityOfElementLocated:
driver.findElement(By.id('elemId')
对于以下任一情况,该方法将返回True:
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("elemId"));
。