4

我正在尝试对我的网站进行测试。在某些用户表单上遇到问题。诀窍是,表单中文本字段的数量因用户选项而异(代码中存在禁用的字段,但有一个样式 < 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;'])]")

问题是萤火虫只定位需要的元素,但是当我使用它时我的硒脚本,打印列表text_fields给了我所有的元素,即使没有 < displayed: none;> 标签

我怎样才能只获得可见元素?

PS对不起我的英语不好^_^

4

3 回答 3

5

您可以按照通常的方式获取所有表单元素,然后在列表上进行迭代并删除那些不返回 true on 的元素is_displayed()

于 2012-04-20T11:45:05.397 回答
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;or display:none,则选择器将不匹配。

于 2012-04-19T10:48:39.133 回答
0

我使用以下内容,效果很好。

self.assertTrue(driver.find_element_by_xpath("//div[@id='game_icons']/div/div[2]/div/a/img"))

这当然适用于 Selenium 和 Python。

于 2013-07-19T17:57:51.303 回答