检查Selenium中的web对象是否位于其他web对象的前面



我有一个webobject,当我点击它时,我会得到:

selenium.com.mon.exceptions.WebDriverException:消息:u'unknown错误:元素在点(128605)是不可点击的。其他元素将收到点击:。。。\n(会话信息:chrome=37.0.2062.120)\n(驱动程序信息:chromedriver=2.10.267518,平台=Linux 3.13.0-36-通用x86_64)'

原因是它前面还有另一个对象,即关于cookie的消息。那么,当我点击web对象时,我如何确保它前面没有任何东西呢?

示例:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://cookie-script.com/")
browser.set_window_size(800, 800)
# Click the Start button that is behind the 'Cookies' popup
el=browser.find_elements_by_xpath("id('sp-feature')/div[1]/p[2]/a[1]")[0]
el.click()

我似乎已经通过简单地处理两个特定的异常,以一种巧妙的方式解决了这个问题。

from selenium.common.exceptions import WebDriverException, StaleElementReferenceException
def click_element(el):
    try:
        el.click()
        return True
    except WebDriverException as exception:
        print("Could not click on element. Maybe something is in front of it?")
    except StaleElementReferenceException as exception:
        print("Reference to element is not valid anymore.")
    return False

您可以使用exception.msg 访问异常消息

这似乎是暂时的。我不确定我是否遗漏了一些案例,但到目前为止,这对我来说是有效的。好的是,如果点击没有成功,你会得到一个False,这非常有帮助,因为Selenium的click()不会返回任何东西。

最新更新