在td中单击xpath的行,其中行包含特定的文本值

时间:2017-06-26 09:49:41

标签: javascript html css xpath

我目前正在使用Nightwatch进行一些自动化测试,但CSS选择器非常复杂,并没有为我做这项工作。我已经开始考虑使用XPath来完成这项工作,但是这个表格相当复杂。

我希望能够.tlick()一个td值内的按钮,其中表中的特定行包含特定值。该表如下所示:

Username    Email           Display Name    Buttons to Click (1st one wanted)
test        test@example    test            (1st button)(2nd button)
test2       test2@example   test            (1st button)(2nd button)

这些值中的每一个都在tr> 1之内。 td所以能够找到它证明是困难的。这是我目前的XPath:

.click('/table[@id="admin-user-list"]/tbody/tr[td = "test2"]/td/button')

HTML树看起来像这样:

<div id>
    <div class>
       <table class>
           <tbody>
               <tr>
                   <td data-bind>(username)
                   <td data-bind>(email)
                   <td data-bind>(display name)
                   <td button>
                       (1st button)
                       (2nd button)
               </tr>
           </tbody>

每一行都有自己的tr,其中包含精确的tds。

一些帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

.click('//table[@id="admin-user-list"]/tbody/tr[./td[text()='test2']/td/button')
  

逻辑://table[@id="admin-user-list"]/tbody/tr[./td[text()='test2']    - 带有文本的td的tr

     该行中的

/td/button - 按钮

但实际上这并不是一个好主意,因为您在每列中搜索该值。最好使用columnName + value

的组合

让我们检查一下该表样本:https://www.w3schools.com/css/css_table.asp

我们将按名称逐列搜索表格数据,例如表格column = Country, data = UK

//*[@id='customers']//tr/td[count(//*[@id='customers']//th[text()='Country']/preceding-sibling::*)+1][text()='UK']

再次,逻辑很简单: 一般定位器是: //*[@id='customers']//tr/td - 我们正在搜索表格数据 参数:[text()='UK']和position = same,如列名[count(column_position)]

如何获得列位置: 只需获取所需文字的列:

//*[@id='customers']//th[text()='Country']并计算其前兄弟姐妹: //*[@id='customers']//th[text()='Country']/preceding-sibling::*,我们还应添加+1,因为我们需要当前元素的位置。并计算员工,所以结果如下:[count(//*[@id='customers']//th[text()='Country']/preceding-sibling::*)+1]

所以有列位置我们可以得到一般定位器:

  

tableId = customers; columnName =国家; dataText = UK;

     

//*[@id='tableId']//tr/td[count(//*[@id='tableId']//th[text()='columnName']/preceding-sibling::*)+1][text()='dataText']

这里是按数据+ columnName

获取孔行的定位器
//*[@id='customers']//tr[./td[count(//*[@id='customers']//th[text()='Country']/preceding-sibling::*)+1][text()='UK']]

基本上你可以搜索其中的任何内容,例如只需添加到最后 /td/button - 从中​​获取按钮