【问题标题】:clicking slippery "ElementNotVisibleException" button selenium webdriver python单击滑“ElementNotVisibleException”按钮 selenium webdriver python
【发布时间】:2016-05-31 04:00:23
【问题描述】:

https://gist.github.com/codyc4321/724f05aca8f6775e2fc1

嗨,bitbucket 更改了他们的登录页面,这给我带来了麻烦。基于以下要点,使用driver.click_button 原因:

ElementNotVisibleException at /bitbucket/create-repo
Message: Element is not currently visible and so may not be interacted with
Stacktrace:
    at fxdriver.preconditions.visible (file:///tmp/tmpSNzLIl/extensions/fxdriver@googlecode.com/components/command-processor.js:9981)
    at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmpSNzLIl/extensions/fxdriver@googlecode.com/components/command-processor.js:12517)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpSNzLIl/extensions/fxdriver@googlecode.com/components/command-processor.js:12534)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpSNzLIl/extensions/fxdriver@googlecode.com/components/command-processor.js:12539)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpSNzLIl/extensions/fxdriver@googlecode.com/components/command-processor.js:12481)

使用driver.submit_form 会导致浏览器本身出错:

使用driver.activate_hidden_element 原因:

ElementNotVisibleException at /bitbucket/create-repo
Message: Element is not currently visible and so may not be interacted with

activate_hidden_element 失败真的让我在最后 5 分钟里风雨飘摇。我怎样才能点击这个阻碍按钮?谢谢

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver selenium-firefoxdriver


    【解决方案1】:

    好的,所以问题实际上出在您的locate_element 方法中。

    当您检查 xpath:"//button[normalize-space(text())='{text}']" 时,它会成功找到一个按钮,但它不是您正在寻找的登录按钮。如果您使用 input xpath: "//input[@value='{text}']" 切换它,它会找到正确的 input 并成功登录。

    您还应该删除BitbucketDriver.login() 方法中的最后两行,因为self.click_button(search_text="Log in") 行会抛出AttributeError

    您的locate_element 方法应如下所示:

    def locate_element(self, search_text, xpaths=None):
        if not xpaths:
            xpaths = [ "//input[@value='{text}']", "//button[normalize-space(text())='{text}']",
                      "//a[child::span[normalize-space(text())='{text}']]", "//a[normalize-space(text())='{text}']"]
        try:
            return self.driver.find_element_by_id(search_text)
        except:
            try:
                return self.driver.find_element_by_name(search_text)
            except:
                try:
                    return self.driver.find_element_by_class_name(search_text)
                except:
                    for path in xpaths:
                        try:
                            return self.driver.find_element_by_xpath(path.format(text=search_text))
                        except:
                            pass
        return None
    

    【讨论】:

    • @codyc4321 很高兴我能帮上忙!
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2019-07-05
    • 2017-01-17
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多