需要可见元素的xpath定位器

时间:2012-04-19 10:45:14

标签: python xpath selenium webdriver selenium-webdriver

我正在尝试为我的网站进行测试。在某些用户表单上遇到麻烦。诀窍是,表单中的文本字段数量因用户选项而异(代码中存在已禁用的字段,但样式为< 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抱歉我的英语不好^ _ ^

3 个答案:

答案 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。