2013-03-01 27 views
1

我有一个帮助函数来查看页面并打开找到的每个帮助按钮。这很好,很简单;使用Xpath单击页面上的所有元素会导致出现ElementNotVisibileException

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() 

但是在一些网页上的helpbuttons可以连同其相应的领域通过这似乎是什么原因造成的ElementNotVisibileException当硒尝试点击这些隐藏的按钮JavaScript的隐藏。

每个帮助按钮在标记中都显示相同,没有应用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是唯一的,但我宁愿能够使用选择挑出来的“名”和“价值”,因为我觉得会更容易让普通的选择,我可以传递值。

回答

相关问题