我正在尝试在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)
答案 0 :(得分:0)
如果您无法找到该元素,那么在您导航到第2步后,您的DOM肯定会发生一些变化,使您的xpath无效。
干杯! : - )
答案 1 :(得分:0)
我们需要考虑一些事情。正如您所提到的"When used same xpath for first step, which works fine, but failing in step 2"
非常正确。在xpath
上,3个单独的元素可以同时具有相同的HTML DOM
。
click()
有效,因为 xpath
不唯一与第一个 Next
按钮。我建议您重新构建第一个 xpath
按钮的 Next
,以使其 unique
onClick()
事件,该事件将更改 HTML DOM
。因此,当您调用 click()
方法时, HTML DOM
会发生变化。原因如上所述,即由于存在 HTML DOM
或 Javascript
Ajax Calls
发生变化>。因此,在调用第一个 click()
之后,我们必须尝试为第二个 xpath
构建唯一的 Next
强>再次按钮。xpath
按钮构建一个唯一的 Next
。照顾所有这些事实,你会看到错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element