我正试图点击selenium中的WEB按钮,但这比听起来更复杂。以下是我正在使用的python代码(在单元测试中):
def search(self, key, value):
"""To return an element with the given key-value pair"""
elements = self.driver.find_elements_by_xpath("//*[@%s]"%key)
for element in elements:
if element.get_attribute(key) == value:
return element
return None
def test1(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(20)
self.driver.get("https://www.swisscom.ch/de/privatkunden.html")
button = self.search("data-tracking-title", "Mobile_Handys & Tablets")
element = self.driver.find_element_by_id("scs-pageheader-navigation-link-1")
hover = ActionChains(self.driver).move_to_element(element)
hover.perform()
button.click()
hrefs = self.driver.find_element_by_xpath("//div[@id='gridProduct10247118']")
错误:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//div[@id='gridProduct10247118']"}
这个错误是有道理的,因为selenium似乎没有点击我在上面搜索的button
元素。
为什么硒不执行"点击"按钮?我在这里想念什么?
附言:有时它根本不起作用,在这种情况下,button
就是None
。然后需要重复整个未更改的测试,也许这样就可以工作了。如何解决?我试着增加等待时间,但也无济于事。。。
答案是重新排列一些代码行!正确的顺序是:
element = self.driver.find_element_by_id("scs-pageheader-navigation-link-1")
hover = ActionChains(self.driver).move_to_element(element)#.click(self.search("data-tracking-title", "Mobile_Handys & Tablets")).perform()
hover.perform()
button = self.search("data-tracking-title", "Mobile_Handys & Tablets")
button.click()
我可能的解释是:首先,必须执行"悬停"操作,然后找到要点击的按钮。看起来原始按钮的"隐藏"属性在"悬停"动作后仍然设置。。。