1

我在 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 或抛出异常,而不是永远挂起?我正在使用硒 2.26.0

4

3 回答 3

1

根据此处找到的答案

如果您使用的是 Firefox 17 和 Selenium 2.26.0,那么您遇到了缺陷 #4814:http ://code.google.com/p/selenium/issues/detail?id=4814

于 2013-01-11T17:05:15.133 回答
1

这似乎是 2.26.0 版本中的错误,pip install selenium==2.27.0已在我的计算机上修复。

于 2013-01-11T17:12:22.873 回答
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]

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

于 2013-01-11T16:49:49.317 回答