selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素

时间:2017-10-08 17:54:23

标签: python selenium xpath

我正在尝试在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)

2 个答案:

答案 0 :(得分:0)

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

  1. 确定您要找到的元素,不要只假设两个&#39; Next&#39;步骤1和步骤2中的按钮相同。
  2. 尝试使用不同的定位器方法,可能使用id / class / css / other选择器方法,如果你能找到与&#39; Next&#39;步骤2中的按钮。
  3. 干杯! : - )

答案 1 :(得分:0)

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

  1. 您的第一个 click() 有效,因为 xpath 不唯一与第一个 Next 按钮。我建议您重新构建第一个 xpath 按钮的 Next ,以使其 unique
  2. 按钮始终应包含 onClick() 事件,该事件将更改 HTML DOM 。因此,当您调用 click() 方法时, HTML DOM 会发生变化。原因如上所述,即由于存在 HTML DOM Javascript Ajax Calls 发生变化>。因此,在调用第一个 click() 之后,我们必须尝试为第二个 xpath构建唯一的 Next 再次按钮。
  3. 同样,出于上述原因,您还需要为第三个 xpath 按钮构建一个唯一的 Next
  4. 照顾所有这些事实,你会看到错误:

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