如何编写一个选择两个不同级别的属性值的XPath

时间:2014-10-01 07:28:58

标签: java html xml xpath selenium-webdriver

有两个表,我需要选择“date1”文本,它可能在第一个表中的tr / td / a或第二个表中的tr / td中。如何为这种场景编写xpath?

<div>
    <table>
       <tbody>
           <tr>
             <td id="1">
                <a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL"> </a>
             </td>  
             <td id="1">
                <a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date1</a>
             </td>  
             <td id="1">
                <a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date1</a>
             </td>
             <td id="1">
                <a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date2</a>
             </td>
             <td id="1">
                <a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date3</a>
             </td>
           </tr>
       </tbody>
    </table>
    <table>
       <tbody>
           <tr>
              <td id="1" style="font-style:normal;font-weight:bold;" class="PTCH"> </td>
              <td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date1</td>
              <td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date2</td>
              <td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date3</td>
           </tr>
       </tbody>
    </table>
</div>

我尝试了这个,但这选择了整行。我想选择一个特定的列

xpath=(//table)[2]//tr[td[contains(text(),'date1') and not(text()=' ')] or td/a[contains(text(),'date1') and not(text()=' ')]]

3 个答案:

答案 0 :(得分:0)

//一个 你可以将其复制到文本文件中并将其更改为html使用firebug为初学者找到路径和xpath检查器(Fire Fox插件)非常容易

答案 1 :(得分:0)

经过多次尝试,我想出了这个,并按照我的需要工作。谢谢大家。

xpath=(//table)[1]//tr/td[contains(text(),'date1') and not(text()=' ') or a[contains(text(),'date1') and not(text()=' ')]]

答案 2 :(得分:0)

在您发布的答案中,您实际上是在选择td元素。你说你想要选择“date1”文本,但如果你已经知道它是什么,那么选择文本是没有意义的。

以下是您发布内容的更简单方法:

//table//tr/td[contains(., 'date1')]

或者,如果您只想包含第一个表格(正如您在帖子中所做的那样):

(//table)[1]//tr/td[contains(., 'date1')]

关于下面的评论,如果要查找属性中的值,请执行以下操作:

(//table)[1]//tr/td[descendant-or-self::*[contains(@style, 'bold')]]

或者,如果您要选择其中包含style属性bold的实际元素:

(//table)[1]//tr/td/descendant-or-self::*[contains(@style, 'bold')]