在selenium python webdriver中是否有办法断言所有复选框都已选中或未选中?

时间:2015-01-28 00:20:55

标签: python selenium checkbox selenium-webdriver

我正在构建一个测试,检查单个页面上许多复选框的状态。

有没有办法可以使用循环或类似的断言断言它们都是选中还是未选中?我是python和python webdriver的新手,所以我甚至不确定如何开始这样的事情。

我已经看过使用java的类似问题的答案,但在python中没有。

感谢您的帮助。

@Anzel,这是我使用的代码:

checkboxes = driver.find_elements_by_xpath('.//input[@type="checkbox"]')
[c.is_selected() for c in checkboxes]
[True, True, False, False, False, False, False, False, False]
assert all([c.is_selected() for c in checkboxes])

这会出现以下错误:

Traceback (most recent call last):
File "test.py", line 71, in test_test
assert all([c.is_selected() for c in checkboxes])
AssertionError

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用 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