我想在以下代码中选择“应用”按钮。有两个按钮,只能看到一个按钮。
//input[@value='Apply' and @id='btn' and @name='btn' and not(ancestor::td[contains(@style,'display:none')])]
我已经在上面写了XPath来选择可见的但是在web驱动程序中它说无法访问该元素。 (浏览器 - IE8)
<table class="ColumnTable" cellspacing="0">
<tbody>
<tr>
<td>
<div id="dashboard~120" class="Section" style="" headeron="" minimized="false" rendered="false">
<table class="SectionT" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style=" display:none;">
<div id="dashboard~Contents" style="">
<table style="width:100%">
<tbody>
<tr height="100%">
<td class="EItem" valign="TOP" align="CENTER" colspan="2" style="">
<div id="EmbedViewd" reloadinline="">
<div id="NavDone" style="display:;">
<div id="Result" result="Prompt">
<table class="ViewTable" cellspacing="0">
<tbody>
<tr>
<td>
<div id="newLayout">
<form style="margin: 0;" method="post" action="javascript:void(null);">
<div style="">
<table class="PromptView" style="">
<tbody>
<tr>
<td class="ButtonsCell">
<input id="btn" class="button" type="button" tabindex="0" value="Apply" name="btn" style="background-color: rgb(240, 240, 240);">
</td>
</tr>
</tbody>
</table>
</div>
</form>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td>
<div id="dashboard~121" class="Section" style="" headeron="true" minimized="false" rendered="false">
<table class="SectionT" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div id="dashboard~Contents" style="">
<table class="SectionTD" style="width:100%; border-top:none;">
<tbody>
<tr height="100%">
<td class="EItem" valign="TOP" align="CENTER" colspan="2" style="">
<div id="EmbedViewd" reloadinline="">
<div id="NavDone" style="display:;">
<div id="Result" result="Prompt">
<table class="ViewTable" cellspacing="0">
<tbody>
<tr>
<td>
<div id="newLayout">
<form style="margin: 0;" method="post" action="javascript:void(null);">
<div style="">
<table class="PromptView" style="">
<tbody>
<tr>
<td class="ButtonsCell">
<input id="btn" class="button" type="button" tabindex="0" value="Apply" name="btn" style="background-color: rgb(240, 240, 240);">
</td>
</tr>
</tbody>
</table>
</div>
</form>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
我的问题是,无论如何还有其他解决这个问题的方法。我认为有很多方法可以编写上面的xpath我是对的吗?
答案 0 :(得分:3)
如果这是Selenium问题,您可以尝试以下操作:
//input[@value='Apply'][@id='btn'][@name='btn']
[not(ancestor::td[contains(@style,'display:none')])]
具有相同结果的相同表达式,但正如此处Xpath does not work with Selenium所述,Selenium可能会在XPath中评估and
时出现问题。
我想提到的另一个问题是,您对多个元素使用相同的id
,id
应该是唯一的。否则您的HTML无效。当您将ID更改为唯一值时,可以减少XPath匹配条件。
答案 1 :(得分:0)
我对你的问题感到有点困惑。
如果您尝试选择按钮以通过CSS修改其样式,只需在CSS文件中创建相应的条目,并在HTML元素的ID(您需要的按钮)中创建。
W3中的示例: Select HTML element by ID
答案 2 :(得分:0)
使用xpath选择元素:
选择第一个元素:
// DIV [@ ID = '仪表板120〜']后裔::输入[@ ID = 'BTN']点击;
选择第二个元素:
// DIV [@ ID = '仪表板121〜']后裔::输入[@ ID = 'BTN']点击;