在没有迭代的情况下获取表中特定行的父级

时间:2016-12-14 10:57:42

标签: ruby automation watir watir-webdriver

考虑下面的表结构包含许多具有多个列值的行。我需要识别特定行的父级,必须使用该单元格进行识别。

<table class = 'grid'>
<thead id = 'header'>
</thead>
<tbody>
<tr>
 <td>
 <span class="group">
  <span class="group__link"><a class="disabledlink"">copy</a>
  </span>
 </span>
 </td>
 <td class="COLUMNNAME">ACE</td>
 <td class="COLUMNLONGNAME">Adverse Childhood Experiences</td>
    <li>Family Medicine</li>
    <li>General Practice</li>
 </td>
 <td class="COLUMNSEXFILTER">Both</td>
 <td class="COLUMNAGEFILTERMIN">Any</td>
 <td class="COLUMNTYPE">Score Only</td>
</tr>
<tr>
 <td class="nowrap" showactionitem="2">
 <span class="group">
  <span class="group__link"><a onclick="Check()" href="#">copy</a>
  </span>
 </span>
 </td>
 <td class="COLUMNNAME">AM-PAC</td>
 <td class="COLUMNLONGNAME">AM-PAC Generic Outpatient Basic Mobility Short Form</td>
 <td class="COLUMNNOTE"></td>
 <td class="COLUMNRESTRICTEDYN">No</td>
 <td class="COLUMNSPECIALTYID"></td>
 <td class="COLUMNSEXFILTER">Both</td>
 <td class="COLUMNAGEFILTERMIN">Any</td>
 <td class="COLUMNTYPE">Score Only</td>
</tr>
<tr></tr>
<tr></tr>
</tbody></thead>
</table>

同样,该表包含大约100行。我使用迭代做了同样的事情并且工作正常。 是否可以在没有迭代的情况下找到特定行的父级?

3 个答案:

答案 0 :(得分:3)

您可以使用sess.run(variable.assign(value))方法查找元素的父级。假设您找到了一个表格单元格,我们将其称为parent,您可以使用cell获取其行,然后使用另一个parent调用获取该行的父级:

parent

链接多个cell.parent #=> a <tr> element cell.parent.parent #=> the parent of the specific row - a <tbody> element in this case 来电可能会变得乏味且难以维护。例如,您必须调用parent 4次才能获得&#34;复制&#34;的表格单元格。链接。如果你是在一个祖先(即不是直接的父母)之后,你最好使用XPath:

parent

希望很快就会实现Issue 451,这将消除对XPath的需求。你可以打电话:

cell.table(xpath: './ancestor::table')
#=> the <table> element containing the cell

browser.link(text: 'copy').tr(xpath: './ancestor::tr')
#=> the <tr> element containing a copy link

答案 1 :(得分:2)

不需要任何花哨的东西,Watir有Element#parent方法。

答案 2 :(得分:0)

你可以使用这个:

<强>父节点::()

以下示例将选择Id =&#39; email&#39;的输入标记的父节点。 例如: //输入[@id =&#39;电子邮件&#39;] / parent :: *

以上也可以重写为 的 //输入[@id =&#39;电子邮件&#39;] / ..

XPath tutorial for Selenium