在表格中,用户在第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>
答案 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
说明
答案 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的向上路径相同。但这只是巧合。