Selenium NoSuchElementError无法捕获(JavaScript)

时间:2018-10-13 10:32:29

标签: javascript selenium mocha

编辑:由于链接的问题都未解决此问题,也未使用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“]”}

1 个答案:

答案 0 :(得分:0)

在调用stalenessOf之前发生异常。
代码

ReactDOM.render(<App />, document.getElementById("root"));

将生成异常NoSuchElementFound。

方法失效时间:
stalenessOf方法没有按照您认为的去做。 该方法期望该元素存在并且将等待直到引发StaleElementException为止。意味着该元素存在,但随后可以刷新或从DOM中删除。

尝试使用方法invisibilityOfElementLocated:

driver.findElement(By.id('elemId')

对于以下任一情况,该方法将返回True:

  1. 元素从未附加到DOM
  2. 一旦元素在您设置的时间内不出现在DOM上。如果仍然存在,它将引发 wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("elemId"));