在表格中搜索文本并单击不同列上的链接使用Watir

时间:2017-10-02 04:47:52

标签: ruby selenium automation webdriver watir

我有以下HTML表格。 enter image description here 在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 -->&nbsp;&nbsp;&nbsp;&nbsp;<!-- /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 -->&nbsp;&nbsp;&nbsp;&nbsp;<!-- /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 -->&nbsp;&nbsp;&nbsp;&nbsp;<!-- /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>

我试图检查表格中是否存在我想要的文字

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”按钮。

谢谢。

2 个答案:

答案 0 :(得分:1)

在查看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

谢谢。

答案 1 :(得分:0)

您是否尝试过直接根据所包含的文字选择行,然后点击该行中的链接?

driver.table(:class => ["table table-striped table-bordered table-hover"])
      .tr(:text => 'TestingName1')
      .i(:class => 'fa-trash')
      .parent
      .click

如果链接元素与同一行中的其他链接(例如类或数据属性)有所不同,那将会更容易,因为我们必须通过唯一的方式找到它在链接中的斜体元素上的类(在该行内)。

您也可以通过索引识别它,但如果表格被更改或重新排列,则可能很容易破坏您的代码或点击错误的链接。

(警告,上面的代码未经测试,只根据您的HTML编写)