使用 Watir 在 Table 中搜索文本并在不同的列上单击 Link
Search Text in Table and Click Link on different column Using Watir
我有以下 HTML table。
有没有办法在 Watir 中点击名字 "TestingName1" 的 "Bin" 标志?
Watir 可以搜索文本 "test" 然后单击 "bin" 徽标吗?
以下是HTML
<table class="table table-striped table-bordered table-hover">
<colgroup>
<col class=""><col class="" style="width: 100px; min-width: 100px;">
<col class="" style="width: 100px; min-width: 100px;">
</colgroup>
<tbody>
<tr class="">
<td tabindex="1" class="" style="text-align: left;">Distributor</td>
<td tabindex="2" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked ant-checkbox-disabled">
<input disabled="" class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner"></span>
</span>
</label>
</div>
</td>
<td tabindex="3" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs" disabled="">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 762 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs" disabled="">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
<tr class="">
<td tabindex="4" class="" style="text-align: left;">testFMM</td>
<td tabindex="5" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked">
<input class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner">
</span>
</span>
</label>
</div>
</td>
<td tabindex="6" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 777 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
<tr class="">
<td tabindex="7" class="" style="text-align: left;">TestingName1</td>
<td tabindex="8" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked">
<input class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner"></span>
</span>
</label>
</div>
</td>
<td tabindex="9" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 792 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
</tbody>
</table>
我已经尝试检查 table
上是否存在我想要的文本
ary = driver.table(:class => ["table table-striped table-bordered table-hover"]).trs.collect{ |tr| tr[0].text }
ary.each do |i|
logger.info i
if i == "#{name1}"
logger.info "The data entered as #{name1} found"
end
end
我仍然无法单击属于文本 "TestingName1" 的右侧 "bin" 按钮。
谢谢。
您是否尝试过直接根据包含的文本选择行,然后单击行内的 link?
driver.table(:class => ["table table-striped table-bordered table-hover"])
.tr(:text => 'TestingName1')
.i(:class => 'fa-trash')
.parent
.click
如果 link 元素与同一行中的其他 link 元素不同(例如 class,或者data- 属性)因为它是我们必须通过 link.
中斜体元素上的唯一 class(在该行内)来定位它
您也可以通过索引来识别它,但是如果 table 被更改或重新排列,那么很容易破坏您的代码或点击错误的 link。
(警告,以上代码未经测试,仅根据您的 HTML 编写)
看了上面 Chuck van der Linden 的回答后,我稍微修改了一下,得到了一个工作代码如下:
table = driver.table(:class => ["table table-striped table-bordered table-hover"])
textRow = table.td(:text => "TestingName1").parent
if textRow.a(:id => "lnkDeleteVendor").exists?
textRow.a(:id => "lnkDeleteVendor").click
end
谢谢。
我有以下 HTML table。
以下是HTML
<table class="table table-striped table-bordered table-hover">
<colgroup>
<col class=""><col class="" style="width: 100px; min-width: 100px;">
<col class="" style="width: 100px; min-width: 100px;">
</colgroup>
<tbody>
<tr class="">
<td tabindex="1" class="" style="text-align: left;">Distributor</td>
<td tabindex="2" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked ant-checkbox-disabled">
<input disabled="" class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner"></span>
</span>
</label>
</div>
</td>
<td tabindex="3" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs" disabled="">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 762 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs" disabled="">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
<tr class="">
<td tabindex="4" class="" style="text-align: left;">testFMM</td>
<td tabindex="5" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked">
<input class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner">
</span>
</span>
</label>
</div>
</td>
<td tabindex="6" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 777 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
<tr class="">
<td tabindex="7" class="" style="text-align: left;">TestingName1</td>
<td tabindex="8" class="" style="text-align: center;">
<div class="form-group">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox ant-checkbox-checked">
<input class="ant-checkbox-input" value="on" type="checkbox">
<span class="ant-checkbox-inner"></span>
</span>
</label>
</div>
</td>
<td tabindex="9" class="" style="text-align: center;">
<div>
<a id="lnkEditVendor" class="btn btn-default btn-xs">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
<!-- react-text: 792 --> <!-- /react-text -->
<a id="lnkDeleteVendor" class="btn btn-default btn-xs">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</div>
</td>
</tr>
</tbody>
</table>
我已经尝试检查 table
上是否存在我想要的文本ary = driver.table(:class => ["table table-striped table-bordered table-hover"]).trs.collect{ |tr| tr[0].text }
ary.each do |i|
logger.info i
if i == "#{name1}"
logger.info "The data entered as #{name1} found"
end
end
我仍然无法单击属于文本 "TestingName1" 的右侧 "bin" 按钮。
谢谢。
您是否尝试过直接根据包含的文本选择行,然后单击行内的 link?
driver.table(:class => ["table table-striped table-bordered table-hover"])
.tr(:text => 'TestingName1')
.i(:class => 'fa-trash')
.parent
.click
如果 link 元素与同一行中的其他 link 元素不同(例如 class,或者data- 属性)因为它是我们必须通过 link.
中斜体元素上的唯一 class(在该行内)来定位它您也可以通过索引来识别它,但是如果 table 被更改或重新排列,那么很容易破坏您的代码或点击错误的 link。
(警告,以上代码未经测试,仅根据您的 HTML 编写)
看了上面 Chuck van der Linden 的回答后,我稍微修改了一下,得到了一个工作代码如下:
table = driver.table(:class => ["table table-striped table-bordered table-hover"])
textRow = table.td(:text => "TestingName1").parent
if textRow.a(:id => "lnkDeleteVendor").exists?
textRow.a(:id => "lnkDeleteVendor").click
end
谢谢。