当前位置: 首页 > 知识库问答 >
问题:

无法捕获Selenium NoSuchElementError(Javascript)[重复]

微生俊捷
2023-03-14

编辑:不确定为什么这被标记为回答,因为链接的问题都没有处理这个问题,也没有使用JavaScript。我正在寻找捕捉此错误的方法,而不是防止它,因为在Javascript版本中,InvisibilityOfelementLociated等方法不可用。

我有一个网站,我正在设置一些基本的自动化测试使用nodeJS,selenium和Mocha。当第一次打开站点时,用户单击一个框并删除一个欢迎消息(这里是'elem id'),然后该消息将不再在DOM中呈现。在开始实际测试之前,我需要检查它是否已不存在,但是尽管使用了stalenessOf,我还是经常得到nosuchelementerror的selenium错误。如果我能捕捉并忽略这个异常,这就不是问题,但不幸的是,捕捉它似乎不起作用。下面是有问题的代码和我收到的错误消息。

    // 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”,“selector”:“*[id=”elemid“]”}

共有1个答案

程举
2023-03-14

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

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

将生成异常NoSuChelementFound。

方法stalenessOf:
方法stalenessOf并不像您认为的那样。该方法期望元素存在,并将等待直到引发StaleElementException。这意味着该元素存在,但是可以刷新或从DOM中删除。

 wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("elemId"));
  1. 元素从未附加到DOM
  2. 一旦元素在您设定的时间内不存在于DOM中。如果仍然存在,它将引发TimeoutException.
 类似资料:
  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪:

  • 问题内容: 我的IDE给我该行的错误 我试着抓住,但是并没有使错误消失。有什么想法吗? 问题答案: 扩展了,所以您的IDE本身就有了更深的麻烦-也许库导入被搞砸了?

  • 我正在尝试捕获SocketTimeoutException,以便我的套接字保持活动状态,并且可以继续读取程序。不幸的是,无论我如何尝试捕获读取超时,我都无法捕获,因此应用程序关闭。

  • 我有一个实体类Person,它通过JoinColumn连接到另一个实体Address,并且与Person有一个关系,Address实体在字段Country上有一个@NotNull注释。 简化代码如下: 我还有一个服务方法,即updateAddress,该方法最简单的形式如下: 我编写了一个小的单元测试,其中我试图使用updateAddress方法为一个没有预定义地址的人更新地址。 即 Transa