另一个Xpath困境

时间:2014-05-13 20:47:02

标签: java selenium xpath selenium-webdriver

好的,首先是代码:

<tr class="tableControlDataRow evenRow twTableTR">
<td class="twTableTD details" align="center" rowspan="2">
<td class="twTableTD details" align="center" rowspan="2">
    <p>
    <br>
    **<p>**
        <b>Model Number:</b>
        QA GM 05132014 1038 Item 1 Model Number
    </p>
    <p>
    <p>
    <p>
    <p>
</td>
<td class="twTableTD" align="center" rowspan="2">May-27-2014</td>
<td class="twTableTD" align="center">France</td>
<td class="twTableTD" align="center">Yes</td>
<td class="twTableTD" align="center">
    <input id="hiddenCountryAuthorizationField0_0" type="hidden" name="tw#local#quoteComparison#0#country#0#authorizationStatusId#" value="0">
    <input id="CountryAuthorizationYES0_0" class="qclCheckbox" type="checkbox" onclick="chooseAuthorization(0,0,'Yes','1')">
    Yes
    <br>
    <input id="CountryAuthorizationNO0_0" class="qclCheckbox" type="checkbox" onclick="chooseAuthorization(0,0,'No','2')">
    No
    <br>
</td>

现在的问题是......我通过

找到了正确的起点
//p[contains(., "QA GM 05132014 1038 Item 1 Model Number")]

这让我看到代码的**部分。现在我需要遍历顶部的<tr class="tableControlDataRow evenRow twTableTR">,然后沿着链条向后移动以点击

<input id="CountryAuthorizationYES0_0" class="qclCheckbox" type="checkbox" onclick="chooseAuthorization(0,0,'Yes','1')">

文本框。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

首先找到tr,其p标记带有相应的文字,然后转到所需的input

//tr[.//p[contains(., "QA GM 05132014 1038 Item 1 Model Number")]]/td/input[@id="CountryAuthorizationYES0_0"]

请注意,这里有多种方法可以编写xpath。希望这个适合你。

答案 1 :(得分:0)

我还建议//p[contains(text(),'QA GM 05132014 1038 Item 1 Model Number')]/ancestor::tbody[1]//input[@id='CountryAuthorizationYES0_0']。它将搜索包含'QA GM 05132014 1038项目1型号'文本的元素,然后搜索第一个父元素tbody,然后从第一个(父)tbody开始所需的输入

答案 2 :(得分:0)

它很漂亮,但这段代码可能会对您有所帮助:

//p[contains(., "QA GM 05132014 1038 Item 1 Model Number")]//parent::br/parent::td/parent::tr//input[@id='CountryAuthorizationYES0_0']