Python 检查web对象是否位于Selenium中其他web对象的前面?
我有一个Python 检查web对象是否位于Selenium中其他web对象的前面?,python,selenium,Python,Selenium,我有一个webobject,当我点击它时,我会得到: selenium.common.exceptions.WebDriverException:消息:u'unknown 错误:元素在点(128605)处不可单击。其他元素 将收到单击:…\n (会话信息:chrome=37.0.2062.120)\n(驱动程序信息: chromedriver=2.10.267518,平台=Linux 3.13.0-36-generic x86_64)' 原因是它前面还有另一个对象,即关于cookies的消息。那
webobject
,当我点击它时,我会得到:
selenium.common.exceptions.WebDriverException:消息:u'unknown
错误:元素在点(128605)处不可单击。其他元素
将收到单击:…\n
(会话信息:chrome=37.0.2062.120)\n(驱动程序信息:
chromedriver=2.10.267518,平台=Linux 3.13.0-36-generic x86_64)'
原因是它前面还有另一个对象,即关于cookies的消息。那么,当我单击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()
不会返回任何内容。如果可单击对象前面有内容,那么真正的用户也会遇到问题,因此这也不正确。也许在你的测试中,首先忽略cookie消息?@michaelb这是真的。但是,我不想提出一个丑陋的Selenium例外,我想告诉用户出了什么问题。很久以前,我有一个类似的问题,在Facebook上打开的一个应用程序有一个特定的按钮,被旧的Facebook聊天按钮覆盖。我使用javascript从DOM中删除Facebook按钮以完成测试。我可以在测试应用程序而不是Facebook时做出这个决定。@alecxe我添加了一个例子。@Pithikos谢谢。您是在寻找一个通用的解决方案,还是在这种特殊情况下可行的解决方案?