【问题标题】:Selenium-webdriver in Ruby crashes when element is not found找不到元素时,Ruby 中的 Selenium-webdriver 崩溃
【发布时间】:2022-01-11 06:38:09
【问题描述】:

查看网页上的动态元素时,如果该元素不存在,Selenium 会崩溃。结果,我不得不拯救应用程序才能继续。我想我的语法有问题

response = driver.find_element(:class, element).text

如果未找到该元素,Selenium 会出错并使应用程序崩溃。无论我的浏览器配置如何,都会发生这种情况。

【问题讨论】:

    标签: ruby selenium selenium-webdriver


    【解决方案1】:

    Selenium 没有崩溃。您的代码遇到了异常情况(尝试使用不存在的元素)。代码通过引发NoSuchElementError 正确响应该异常情况。

    如果您试图确定某个元素是否存在,您可以使用Driver#find_elements 并检查Array#size 是否等于0。

    如果您尝试使用页面上尚未出现的元素,则需要创建显式等待以轮询该元素以显示在 DebanjanB 的答案中。

    【讨论】:

      【解决方案2】:

      您需要稍等片刻让元素变为visible,然后再尝试按如下方式定位它:

      wait = Selenium::WebDriver::Wait.new(:timeout => 10)
      ele = wait.until { driver.find_element(:class, element).displayed? }
      response = ele.text
      

      【讨论】:

      • 问题不是等待元素出现,它实际上不存在。
      • 如果问题不存在或不存在,您将必须在获取元素之前修复因查找元素而发生的任何错误。文本。
      • 这个答案需要注意的一点是,Selenium 区分了 DOM 中可识别的元素和页面上显示的元素。当元素仍不可交互时,此代码可能会退出等待。您可能更喜欢:wait.until { driver.find_element(:class, element).displayed? }
      • @titusfortner 如果元素需要一些时间才能存在,您建议的代码仍然会失败。
      • @Rajagopalan Selenium 在等待时自动拯救NoSuchElementErrorgithub.com/SeleniumHQ/selenium/blob/trunk/rb/lib/selenium/…
      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2016-09-07
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多