我在 IE9 中使用 Selenium(.NET/语言为 C#)并具有以下 html 标记(相关部分)
<tr>
<td class="a" align="b">
<span class="i"/>
<input type="checkbox" class="checkboxClass" name="chkBox" value="100" disabled/>
</td>
<td>
<a href="/links/items/100.img">Battery</a>
</td>
<td align="left">3/16/2016
</td>
</tr>
<tr>
<td class="a" align="b">
<span class="i"/>
<input type="checkbox" class="checkboxClass" name="chkBox" value="101"/>
</td>
<td>
<a href="/links/items/101.img">Polish</a>
</td>
<td align="left">3/16/2016
</td>
</tr>
<tr>
<td class="a" align="b">
<span class="i"/>
<input type="checkbox" class="checkboxClass" name="chkBox" value="101" disabled/>
</td>
<td>
<a href="/links/items/102.img">Polish</a>
</td>
<td align="left">3/16/2014
</td>
</tr>
目标是仅当兄弟的复选框被禁用时才获得所有href 。我对 XPath 几乎没有经验,但我设法使用以下表达式获得所有href,但坚持如何将选择限制为仅禁用检查 -盒子。
var hrefs = driver.FindElements(By.XPath("//tr/td[2]/a"));
我对“前兄弟”做了很多试验和错误,但没有走得更远。例如,我尝试硬编码 href 并查看是否可以访问复选框元素,以便稍后我可以在循环中对其进行概括并检查复选框的“已选择”属性。但是以下不起作用。
var checkbox = driver.FindElement(By.XPath("//tr/td[a[@href='links/items/100.img']]/preceding-sibling::td[1]"));
我的直觉是,解决方案可能很简单,就像一个 XPath 表达式一样,所以我可以避免循环,这将有助于从社区获得反馈。