如何修复selenium调用以单击按钮(在python中)



我正试图点击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()

我可能的解释是:首先,必须执行"悬停"操作,然后找到要点击的按钮。看起来原始按钮的"隐藏"属性在"悬停"动作后仍然设置。。。

最新更新