使用WATIR访问表TH元素

时间:2011-05-05 12:57:31

标签: watir firewatir watir-webdriver

我需要检查表中是否显示某个列。 每列都有一个带有唯一ID的TH标头。 检查表中TH元素是否存在的最佳方法是什么?

以下是表格代码的示例。

<table id="attr-table">
  <thead>
    <tr>
      <th id="attr-action-col"><input type="checkbox" value="" class="attr-action-box" id="attr-action-col_box"></th>
      <th id="attr-name-col">Name<span class="ui-icon ui-icon-triangle-1-n"></span></th>
      <th id="attr-type-col"></th>
      <th id="attr-scope-col"></th>
      <th id="attr-value-col">English Value</th>
      <th id="attr-master-col">Master Value</th>
      <th id="attr-translation-col">T</th>
      <th id="attr-workflow-col">Status</th>
      <th id="attr-history-col">H</th>
    </tr>
  </thead>
<tbody>
....
</tbody></table>

TIA

2 个答案:

答案 0 :(得分:2)

尝试th,它应该在watir-webdriver中工作,如果它在其他Watir宝石中不起作用:

browser.th(:id, 'attr-translation-col').exists?

答案 1 :(得分:1)

一般来说.exists?方法是您查看给定元素是否存在的最佳选择。它返回true或false ..

browser.cell(:id,'attr-translation-col')。存在吗?

= - = - = - =编辑以反映通过评论获得的内容以及一些调查结果= - = - = - =

在Watir与Watir-Webdriver中,.cell方法的实现方式截然不同。这似乎没有包含在关于两者之间差异的文档中。

在Watir中, .cell 方法在 Watir :: Container 模块中定义,并返回 tablecell 对象。这使得 .cell 方法几乎可以从 Container 或包含它的任何内容中获得。例如 IE 对象。 tablecell 对象来自 Element 类,因此可以访问大多数预期的方法,例如 .exists?

在Watir-Webdriver中, .cell 方法在 Watir :: CellContainer 中定义。该模块包含在 Watir :: TableRow 中,这意味着(假设我正确理解这一点) .cell 方法只能在TableRow对象中使用,或者某些东西包括 TableRow 或从中继承。例如,如果您查看Watir-Webdriver 浏览器对象,则不会看到列出的 .cell 方法。与Watir一样, tablecell 对象来自 Element 类,同样应该可以访问 .exists?方法。

.cell 相比, .tr,.td,.th 的Watir-Webdriver方法都在 Watir :: Container中定义(与CellContainer相对)因此具有高可用性并且通常可以工作。

那么对这两个项目的Rdoc的分析是告诉我的是,如果你真的可以在Watir-webdriver中找到一个tablecell对象,你应该能够调用.exists吗?但是,您可能会发现可以使用.cell来获取表格单元格的限制,因为很少有对象支持此方法。如果您看到有关方法不存在的错误,则可能是.cell方法,而不是.exists?方法(关注Watir-Webdriver)