我有一个帮助函数来浏览页面并打开它找到的每个帮助按钮。它既好又简单;
def openHelp(ff):
"""
Opens all the help buttons on the screen
@type ff: instance of webdriver
@param ff: firefox instance of webdriver
"""
allHelpButtons = ff.find_elements_by_xpath('//a[@class="helpButton"]')
for helpButton in allHelpButtons:
helpButton.click()
但是,在某些页面上,帮助按钮及其相应的字段可能会被 javascript 隐藏,这似乎是导致ElementNotVisibileException
Selenium 尝试单击这些隐藏按钮的原因。
每个帮助按钮在标记中的显示都是一样的,没有display:none
应用,所以我不能这样检查。它们是这样出现的;
<a class="helpButton" title="Help about: Field" href="#">
<img alt="Help about: Field" src="/static/images/helpIcon.png">
</a>
如果存在此异常,我假设必须有一种方法可以用来检查元素是否可见。理想情况下,我只想将所有可见元素收集到我的allHelpButtons
列表中,但我找不到任何文档。我可以对我的 xpath 搜索进行检查,还是必须在收集元素后对其进行检查?
奖金问题
我还想知道,是否可以通过匹配名称和值来选择列表项。例如,我在页面中将 Yes/No 单选按钮选择定义为ul
;
<ul class="compact horizontal ">
<li>
<input id="id_fieldname_0_true" type="radio" value="True" name="fieldname">
<label for="id_fieldname_0_true">Yes</label>
</li>
<li>
<input id="id_fieldname_0_false" type="radio" value="False" name="fieldname">
<label for="id_fieldname_0_false">No</label>
</li>
</ul>
显然 id 是唯一的,但我宁愿能够使用选择器来挑选“名称”和“值”,因为我认为这样可以更容易地制作可以传递值的通用选择器。