是的,您可以使用 is_selected() 来测试该元素是否被选中。如果你使用find_elements_by_xxx(),那么你只需要循环遍历它并assert他们的结果。
让我们看一个示例:
from selenium import webdriver
driver = webdriver.Firefox()
url = 'http://www.tizag.com/htmlT/htmlcheckboxes.php'
driver.get(url)
checkboxes = driver.find_elements_by_name('sports')
# simply use is_selected() can yield their Selected status
[c.is_selected() for c in checkboxes]
[False, False, False, False, True, False, False, True]
# to assert they are all unchecked, use not any()
assert not any([c.is_selected() for c in checkboxes])
# so to assert they are all checked, just use all()
assert all([c.is_selected() for c in checkboxes])
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-661-c6f9ba4afaf2> in <module>()
----> 1 assert all([c.is_selected() for c in checkboxes])
AssertionError:
更新:
您可以通过 xpath 简单地找到所有复选框,这通常有效:
driver.find_elements_by_xpath('.//input[@type="checkbox"]')
但这不是保证,您确实需要不时提出自定义解决方案。
这是一个Webdriver支持到find元素的列表:
[_ for _ in dir(driver) if 'find' in _]
Out[10]:
['find_element',
'find_element_by_class_name',
'find_element_by_css_selector',
'find_element_by_id',
'find_element_by_link_text',
'find_element_by_name',
'find_element_by_partial_link_text',
'find_element_by_tag_name',
'find_element_by_xpath',
'find_elements',
'find_elements_by_class_name',
'find_elements_by_css_selector',
'find_elements_by_id',
'find_elements_by_link_text',
'find_elements_by_name',
'find_elements_by_partial_link_text',
'find_elements_by_tag_name',
'find_elements_by_xpath']
显然没有by_type,所以它会给你一个AttributeError。