我在Python中使用selenium,当我搜索不存在的元素时,它总是会冻结。我真的尝试了一切(Firefox版本17.0.1):
>>> import selenium
>>> selenium.__version__
'2.26.0'
>>> from selenium import webdriver
>>> from selenium.webdriver.support.ui import WebDriverWait
>>> ff = webdriver.Firefox()
>>> ff.implicitly_wait(5)
>>> ff.set_page_load_timeout(5)
>>> ff.set_script_timeout(5)
>>> waiter = WebDriverWait(ff, 5)
>>> waiter.until(lambda ff: ff.find_element_by_name("foo"))
最后一个命令无限期冻结。如何在没有找到元素的情况下让firefox简单地返回None或抛出异常,而不是挂起永远?我正在使用selenium 2.26.0
答案 0 :(得分:1)
根据找到的答案here
如果你使用的是Firefox 17和Selenium 2.26.0,那么你就会遇到缺陷#4814:http://code.google.com/p/selenium/issues/detail?id=4814
答案 1 :(得分:1)
它似乎是版本2.26.0中的错误,pip install selenium==2.27.0
已将其修复到我的计算机上。
答案 2 :(得分:0)
目前,我正在使用这种解决方法:
def selenium_safe_find_element_by_name(ff, element_name):
elements = ff.find_elements_by_name(element_name)
if not elements:
raise ValueError("<name=%s> not found" % (element_name,))
return elements[0]
但是,如果没有这种解决方法,这似乎应该以某种方式工作。