【问题标题】:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate elementselenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素
【发布时间】:2017-10-08 17:54:22
【问题描述】:

我正在尝试在 3 步对话框中识别一个按钮,因此需要在对话框的前 2 步中单击相同的“下一步”按钮,当第一步使用相同的 xpath 时,它工作正常,但一步失败2.

我的 Python 代码:

a=driver.find_element_by_xpath(".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]")
a.send_keys(selenium.webdriver.common.keys.Keys.SPACE)

上面的代码有效并且元素被点击了。

driver.implicitly_wait(30)
b=driver.find_element_by_xpath(".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]")
b.send_keys(selenium.webdriver.common.keys.Keys.SPACE)

这会失败并出现以下异常。

观察到异常:

Traceback (most recent call last):
  File "C:\Users\sabarish.kannan\workspace1\de.vogella.python.first\src\FirstModule.py", line 49, in <module>
    b=driver.find_element_by_xpath(".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]")
  File "C:\Users\sabarish.kannan\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 354, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\sabarish.kannan\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 832, in find_element
    'value': value})['value']
  File "C:\Users\sabarish.kannan\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 297, in execute
    self.error_handler.check_response(response)
  File "C:\Users\sabarish.kannan\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]"}
  (Session info: chrome=61.0.3163.100)
  (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.10240 x86_64)

【问题讨论】:

  • 请分享网址或html
  • 也许第一次点击按钮会触发一个改变 HTML 的 JS 代码。您正在使用绝对 xpath,当 HTML 更改时可能会失败。
  • 请阅读How to Ask,尤其是关于minimal reproducible example(MCVE)和How much research effort is expected?的部分,这将帮助您调试自己的程序并自己解决问题。如果您这样做并且仍然卡住,您可以返回并发布您的 MCVE、您尝试过的内容以及执行结果(包括任何错误消息),以便我们更好地帮助您。还提供指向页面和/或相关 HTML 的链接。

标签: python selenium xpath


【解决方案1】:

如果您无法找到该元素,那么在您导航到第 2 步后,您的 DOM 肯定会发生一些变化,导致您的 xpath 无效。

  1. 请确定您要查找的元素,不要只是假设第 1 步和第 2 步中的“下一步”按钮相同。
  2. 尝试使用不同的定位器方法,可能使用 id/class/css/其他选择器方法,如果您可以在步骤 2 中找到与“下一步”按钮相关联。

干杯! :-)

【讨论】:

    【解决方案2】:

    我们需要在这里考虑一些事情。正如你提到的"When used same xpath for first step, which works fine, but failing in step 2" 是非常正确的。 HTML DOM 上的 3 个独立元素不能同时具有相同的 xpath

    1. 您的第一个 click() 有效,因为不是唯一的 xpath 与第一个 Next 按钮匹配。我建议你重构第一个 Next 按钮的 xpath 使其成为 unique
    2. 一个按钮总是应该有一个 onClick() 事件,这将改变 HTML DOM。因此,当您调用 click() 方法时,HTML DOM 会发生变化。原因如上所述,即由于 JavascriptAjax Calls 的存在而导致 HTML DOM 发生变化。因此,在调用第一个 click() 之后,我们必须再次尝试为第二个 Next 按钮构造一个唯一的 xpath
    3. 同样,出于上述原因,您也需要为第三个 Next 按钮构造一个唯一的 xpath

    考虑到所有这些事实,您将消除错误:

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2021-01-25
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多