通过Ruby脚本进行表单提交验证

时间:2017-04-24 19:06:34

标签: ruby watir

我有一个文件,其中包含以下HTML代码:

<label for="subject">Subject</label>* : <input name="subject" id="subject" type="text">
<br>    
<label for="message">Message</label>* : <textarea type="text" name="message" id="message"></textarea>
<br>
<input name="name" id="name" value="" type="hidden">
<input value="Submit Ticket" onclick="submitTicket()" type="button">

提交表单后,相应的故障单将位于包含以下HTML代码的表中:

<table class="list" width="100%">
    <tbody><tr class="messagelist">
        <th>#</th>
        <th>ID</th>
        <th>Name</a></th>
        <th>Subject</a></th>
        <th>Owner</a></th>
        <th>Priority</a></th>
    </tr>
    <tr class="list_row">
        <td>1.</td>
        <td><a href="index.html?ID=14" class="trackingcode">14</a></td>
        <td class="name">X</td>
        <td class="subject">Test1</td>
        <td class="owner">AB</td>
        <td class="priority">High</td>
    </tr>
    <tr class="list_row">
        <td>2.</td>
        <td><a href="index.html?ID=22" class="trackingcode">22</a></td>
        <td class="name">Y</td>
        <td class="subject">Test2</td>
        <td class="owner">CD</td>
        <td class="priority">Low</td>
    </tr>
    <tr class="list_row">
        <td>3.</td>
        <td><a href="index.html?ID=31" class="trackingcode">31</a></td>
        <td class="name">Z</td>
        <td class="subject">Test3</td>
        <td class="owner">EF</td>
        <td class="priority">Medium</td>
    </tr>
    <tr class="list_row">
        <td>4.</td>
        <td><a href="index.html?ID=42" class="trackingcode">42</a></td>
        <td class="name">A</td>
        <td class="subject">Test4</td>
        <td class="owner">GH</td>
        <td class="priority">High</td>
    </tr>
    <tr class="list_row">
        <td>5.</td>
        <td><a href="index.html?ID=34" class="trackingcode">34</a></td>
        <td class="name">B</td>
        <td class="subject">Test5</td>
        <td class="owner">IJ</td>
        <td class="priority">Low</td>
    </tr>
    <tr class="list_row">
        <td>6.</td>
        <td><a href="index.html?ID=43" class="trackingcode">43</a></td>
        <td class="name">C</td>
        <td class="subject">Test6</td>
        <td class="owner">KL</td>
        <td class="priority">Medium</td>
    </tr>
</tbody></table>

我正在为上面的表格和票证写一个RUBY代码。我想验证有关主题Test1的已提交表单和票证。根据主题,我想点击Test1的ID链接。 有人可以帮忙怎么做?

以下是我的尝试:

    require 'watir'

    browser.tds(:class, 'list_row').each do |tds_row|
        if tds_row.text =~ /Test1/
            tds_row.a(:href, 'index.html').click
        end
    end

2 个答案:

答案 0 :(得分:0)

您可以迭代表行,迭代行的元素将是表格单元格。然后,您可以检查该单元格的文本。如果第4个单元格的值是您要查找的值(即“Test1”),则单击第二个单元格中的链接,然后退出迭代。这是一个人为的例子:

require 'watir'

b = Watir::Browser.new :chrome
b.goto("http://some_url")

b.button(:value => "Submit Ticket").click
b.trs.each do |tr|
  if tr[3].text == "Test1"
    tr[1].a.click 
    break
  end
end
b.close

它仍然笨重而脆弱,因此根据类属性定位细胞可能更好。

另外 - 在你的例子中 - 看起来你正试图根据父行的类属性(即browser.tds(:class, 'list_row')而不是browser.tds(:class, 'list_row')来定位表格单元格。

答案 1 :(得分:0)

鉴于HTML已经很好地标记,迭代遍历行比它必须更复杂。找到特定的主题单元格然后导航到其父行会更容易。

# Find the cell with the specific subject text
subject = browser.td(class: 'subject', text: 'Test1')

# Get the row
row = subject.parent

# Click the tracking code link
row.link(class: 'trackingcode').click