python selenium挂起找不存在的元素

时间:2013-01-11 16:31:37

标签: python firefox selenium

我在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

3 个答案:

答案 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]

但是,如果没有这种解决方法,这似乎应该以某种方式工作。