对于表第2列中的唯一指定值,如何单击同一行中的第8列?

时间:2014-09-09 07:26:36

标签: watir

在表格中,用户在第2列中查找唯一值,然后单击第8列中的任何内容。这将打开一个弹出窗体。

我知道如何使用Watir点击第8列。但是我不知道如何在第2列中点击第8列中的指定值。我不在乎col中的内容8。

以下是调试声明:

table = browser.table(:id => 'ManageLists')
row_2 = table[1]
cell_2 = row_2[1]
debug cell_2.text     # ad.05.IL.R.nC.Own.Wait
cell_8 = row_2[7]
debug cell_8.text     # 7   (Just coincidence. It could be any number)

这里是如何点击单元格8:

browser.span(:text => "7").click    

单元格2的HTML:

<span onclick="javascript:showListMembers(353);" style="text-decoration:none; border-bottom: 1px solid Gray;">ad.05.IL.R.nC.Own.Wait</span>

单元格8的HTML:

<span onclick="javascript:showListMembers(353);" style="text-decoration:none; border-bottom: 1px solid Gray;">7</span>

所以,重复这个场景:我希望Watir找到ad.05.IL.R.nC.Own.Wait,然后点击第8列。

------------------------------------

HTML添加。仅扩展第2列和第8列。请注意,代码用于第二行,而不是第一行。因为我怀疑我点击第8列的某些尝试只是因为它们在第一行才成功。因此,指定第一行中始终选择col 8的下一行。

<table id="ManageLists" class="ui-jqgrid-btable" cellspacing="0" cellpadding="0" border="0"     tabindex="0" role="grid" aria-multiselectable="false" aria-labelledby="gbox_ManageLists" style="width: 1015px;">
<tbody>
<tr class="jqgfirstrow" style="height:auto" role="row">
<tr id="1" class="ui-widget-content jqgrow ui-row-ltr" tabindex="-1" role="row">
<tr id="2" class="ui-widget-content jqgrow ui-row-ltr" tabindex="-1" role="row">

<td aria-describedby="ManageLists_Id" title="351" style="text-align:left;" role="gridcell">351</td>

<td aria-describedby="ManageLists_ListName" title="ad.05.IL.nR.nC.Own.Wait" style="text-align:left;" role="gridcell">
<span onclick="javascript:showListMembers(351);" style="text-decoration:none; border-bottom: 1px solid Gray;">ad.05.IL.nR.nC.Own.Wait</span></td>

<td aria-describedby="ManageLists_List Owner" title="xxxxxx, xxxxx" style="text-align:left;" role="gridcell">
<td aria-describedby="ManageLists_List Type" title="iList" style="text-align:left;" role="gridcell">iList</td>
<td aria-describedby="ManageLists_Status" title="Waiting" style="text-align:left;" role="gridcell">Waiting</td>
<td aria-describedby="ManageLists_Restricted" title="No" style="text-align:left;" role="gridcell">No</td>
<td aria-describedby="ManageLists_Confidential" title="No" style="text-align:left;" role="gridcell">No</td>

<td aria-describedby="ManageLists_Members" title="7" style="text-align:right!important;" role="gridcell">
<span onclick="javascript:showListMembers(351);" style="text-decoration:none; border-bottom: 1px solid Gray;">7</span></td>

<td aria-describedby="ManageLists_Nominees Waiting" title="0" style="text-align:right!important;" role="gridcell">0</td>
<td aria-describedby="ManageLists_Audit" title="" style="text-align:center !important;" role="gridcell">
</tr>

2 个答案:

答案 0 :(得分:1)

你可以这样做:

table = browser.table(:id => 'ManageLists')
row = table.trs.find { |tr| tr[1].text == 'ad.05.IL.R.nC.Own.Wait' }
row.td(:index => 7).span.click

说明

  • 第一行获取要搜索的表格。
  • 第二行遍历行并找到第二行中第二行中的文字为“ad.05.IL.R.nC.Own.Wait”。
  • 第三行获取找到的行并单击第八列中的范围。

答案 1 :(得分:1)

我已经破解了父母&#34;问题。正如本主题其他部分所述,该解决方案基于Justin的旧帖子之一:

Using Watir to click on a specific link when there are other links with the same display text链路时-有-是-其他链路与 - 的-相同

我对#34;父母&#34;感到很满意,因为我对使用Selenium的xPath非常擅长。这个想法是找到细胞2和细胞8的共同祖先。诀窍在于理解细胞2的介入祖先的数量不需要与细胞8相同。并且插入的标记可以是不同的。 (在我的具体情况下,一切都是一样的。不能全部丢失。)

Watir&#34;父母&#34;似乎比xPath更容易编码。

在我的场景中,tr是单元格2和单元格8最近的共同祖先。单元格2中tr的结构是:

<tr
  <td
    <span

所以,我的最终代码是:

# span = browser.span(:text => "ad.05.IL.R.nC.Own.Wait")   # first row. Works OK
# span = browser.span(:text => "ad.05.IL.nR.nC.Own.Wait")   # second row. Works OK
span = browser.span(:text => "ad.03.IL.R.nC.nOwn.Wait")   # ninth row. Works OK
td = span.parent
tr = td.parent    
tr.td(:index => 7).span.click     # click cell 8 in the specified row

您可以看到从tr到单元格8的向下路径与从单元格2到tr的向上路径相同。但这只是巧合。