【问题标题】:Fetch parent of a specific row in a table without iteration无需迭代即可获取表中特定行的父级
【发布时间】:2016-12-14 10:57:42
【问题描述】:

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

<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 行。我使用迭代做了同样的事情,它工作正常。 是否可以在不迭代的情况下找到特定行的父级?

【问题讨论】:

  • 您想使用单元格来定位行吗?
  • 你能把你的编码也加进去以供参考吗?
  • 当您说“特定行的父级”时,您是要获取包​​含该单元格的 tr 元素还是包含该单元格的 tr 的父级?措辞暗示后者,但我认为您想要前者?

标签: ruby automation watir watir-webdriver


【解决方案1】:

您可以使用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 调用可能会变得乏味且难以维护。例如,您必须调用parent 4 次才能获取“复制”链接的表格单元格。如果您在寻找祖先(即不是直接父),则最好使用 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

希望Issue 451 将很快实现,这将消除对 XPath 的需求。您可以致电:

cell.parent(tag_name: 'table') # equivalent to `cell.table(xpath: './ancestor::table')`

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你可以用这个:

    parent::node()

    以下示例将选择 Id='email' 的输入标签的父节点。 例如://input[@id='email']/parent::*

    以上也可以改写为
    //input[@id='email']/..

    XPath tutorial for Selenium

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2017-04-24
      • 2018-11-21
      • 1970-01-01
      相关资源
      最近更新 更多