2017-10-08 237 views
-1

我想在3步骤对话框中识别按钮,所以需要在前两步中点击相同的“下一步”按钮对话框中,当用于第一步骤中,其正常工作的xpath相同,但在步骤失败2.selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素

我的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) 
+0

请分享URL或HTML – iamsankalp89

+0

也许在首次按钮点击触发的JS代码,更改HTML 。您使用的绝对路径在HTML更改时可能会失败。 – nutmeg64

+0

请仔细阅读[问],特别是关于[mcve](MCVE)的部分,以及[预计需要多少研究工作?](https://meta.stackoverflow.com/questions/261592/how-much-research-effort这是预期的堆栈溢出用户)这将帮助您调试自己的程序并为自己解决问题。如果你这样做并且仍然卡住,你可以回过头来发布你的MCVE,你试过的,以及执行结果,包括任何错误信息,这样我们可以更好地帮助你。还提供了一个链接到页面和/或相关的HTML。 – JeffC

回答

0

如果你无法找到该元素,那么肯定是有一些变化与DOM使你的XPath无效后您导航到第2步。

  1. 确保元素的您正在试图找到,不只是假定这两个“下一步”按钮,在第1步是相同的,第2步。
  2. 尝试使用不同的定位器方法,如果您可以在步骤2中找到与“下一步”按钮关​​联的方法,可以使用id/class/css/other选择器方法。

干杯! :-)

0

我们需要在这里考虑一些事情。正如你所提到的"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改变。其原因是在HTML DOM即变化如上指出由于JavascriptAjax Calls存在。因此,第一个click()被调用后,我们必须再次尝试构建一个独特的xpath第二Next按钮。
  3. 同样,对于你上面所陈述的理由需要构造一个独特xpath第三Next按钮了。

考虑所有这些事实,你会看到走在错误的护理:

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