我正在尝试为我的网站进行测试。在某些用户表单上遇到麻烦。诀窍是,表单中的文本字段数量因用户选项而异(代码中存在已禁用的字段,但样式为< displayed: none;
>标记),所以我试图找到比逐个定位每个元素并使用try / except块填充表单更灵活的方法。
我正在使用xpath定位器
text_fields = driver.find_elements_by_xpath("//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and not(ancestor::div[@style='display: none;'])]")
问题是firebug只找到了所需的元素,但是当我使用它时我的selenium脚本,打印text_fields
列表会给我所有元素,即使没有< displayed: none;
>标签
如何才能获得可见元素?
PS抱歉我的英语不好^ _ ^
答案 0 :(得分:4)
您可以通常的方式获取所有表单元素,然后迭代列表并删除那些在is_displayed()
上未返回true的元素。
答案 1 :(得分:1)
尝试contains()
方法:
text_fields = driver.find_elements_by_xpath(
"//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and
not(ancestor::div[contains(@style, 'display: none;')])]")
重要的部分是:
div[contains(@style, 'display: none;')]
注意,如果样式包含字符串display:none;
或display:none
,则选择器将不匹配。
答案 2 :(得分:0)
我使用以下内容并且效果很好。
self.assertTrue(driver.find_element_by_xpath("//div[@id='game_icons']/div/div[2]/div/a/img"))
这当然适用于Selenium和Python。