我正在尝试对我的网站进行测试。 在某些用户表单上遇到麻烦。 诀窍在于,表单中文本字段的数量根据用户选项的不同而有所不同(代码中存在禁用的选项,但具有样式<< x0 >>标记),因此我试图寻找一种比以下方法更灵活的方法 逐一定位每个元素,并用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;'])]")
麻烦的是萤火虫只查找需要的元素,但是当我使用它的硒脚本时,即使没有<< x0 >>标记,打印text_fields的列表也能给我所有元素
我怎样才能只获得可见元素?
PS对不起,我的英语不好^ _ ^
def make_an_order(驱动程序):text_fields = driver.find_elements_by_xpath(" // div [@ class = form-line] / div [@ class = form-inputs] / input [@ type = text")for text_fields中的字段:尝试: field.clear()除外:通过找到解决方案。 但是这个问题仍然很有趣
是注入jQuery并使用:visible选择器吗?
您可以按通常方式获取所有表单元素,然后在列表上进行迭代并删除在is_displayed()上不返回true的那些元素。
谢谢,您的方法很好用!
尝试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,则选择器将不匹配。
我忘了提,但是我首先尝试了contains()方法。 相同的故事
请发布您的html
我使用以下内容,效果很好。
self.assertTrue(driver.find_element_by_xpath("//div[@id='game_icons']/div/div[2]/div/a/img"))
当然,这是针对Selenium和Python的。