0

ここに画像の説明を入力

そのため、本のリストがあり、最初の列に各本に対して表示と削除の2つのリンクがあるようなテーブルがあります。

Watir を使用して、指定された本のタイトルの行を見つけ、その本の表示ボタンをクリックできるようにしたいと考えています。

これが私がこれまでに持っているものです

And /^click on View link of "(.*)" on the result set table$/ do |cell_name|
   cellButton("submit.view", cell_name, "")
end
#
#
And /^click on Delete link of "(.*)" on the result set table with no_wait$/ do |cell_name|
   cellButton("submit.delete", cell_name, "no_wait")
end
#
#
def cellButton(submit_type, s_name, s_wait_type)
   c_found = 0
      @browser.tables do |tbl|
         tbl.rows do |r|
            r.each do |c|
               if c.text.to_s.matches(s_name)
                   c_found += 1
                end
               break if c_found > 0
            end
            if c_found > 0
               if s_wait_type == "no_wait"
                  r.button(:name, submit_type).click_no_wait
               else
                  r.button(:name, submit_type).click
               end
            end
            break if c_found > 0
         end
      end
end

そして、これは特定のビューボタンのhtmlです

<tr class="even">
     <td class="actionColumn">
         <span style="margin: 0px; padding: 0px; display: inline;">[</span>
         <input id="013c6e2c8187_885b_1bd1f6fc" name="submit.view" class="action_link" size="" value="View" type="button"  onclick="location.href='book_details.html'">
         <span style="margin: 0px; padding: 0px; display: inline;">]</span><br>                                                 
         <div>
             <span style="margin: 0px; padding: 0px; display: inline;">[</span>
             <input id="013c6e2c8187_1194_75ae28a8" name="submit.delete" class="action_link" size="" value="Delete" type="button">
             <span style="margin: 0px; padding: 0px; display: inline;">]</span>                                                  
         </div>
     </td>
     <td>
        book title
     <td>
     <td>
        more tds
     </td>
 </tr>

スクリプトの実行時にエラーは発生しませんが、表示リンクは押されません。

私は Watir 4.0、Ruby 1.9.3、および Cucumber 1.3.3 を使用しています。

4

2 に答える 2

2

テーブルのhtmlが次のとおりであると仮定します。

<table>
    <tr>
        <td>
            <input id="013c6e2c8187_885b_1bd1f6fc" name="submit.view" class="action_link" size value="View" type="button" onclick="location.href='book_details.html'"> 
        </td>
        <td>
            book title 1
        </td>
    </tr>
    <tr>
        <td>
            <input id="013c6e2c8122_885b_1bd1f6fc" name="submit.view" class="action_link" size value="View" type="button" onclick="location.href='book_details2.html'"> 
        </td>
        <td>
            book title 2
        </td>
    </tr>
</table>

次に、本のタイトルとビュー ボタンが親行 (tr) によって関連付けられていることがわかります。

兄弟によって要素にアクセスする最も簡単な方法は次のとおりです。

  1. unique 属性を持つ要素を見つけます。この場合、書籍のタイトルの td です。
  2. メソッドを使用して親要素 (つまり、tr) を取得しparentます。
  3. 親要素に関連する目的の要素を取得します (つまり、行の最初のビュー ボタン)。

たとえば、「本のタイトル 2」の [表示] ボタンを取得するには、次のようにします。

book_title = 'book title 2'
table = browser.table(:id => 'my_table')
book_row = table.td(:text => book_title).parent
book_row.button(:value => 'View').click

上記のソリューションは、任意の列で本のタイトルを探します。本のタイトル テキストが 1 列にのみあると予想される場合は、これで問題ありません。テキストが別の列にある可能性がある場合は、次のようにします。

book_title = 'book title 2'
table = browser.table(:id => 'my_table')
book_row = table.trs.find{ |tr| tr.td(:index => 1).text == book_title }
book_row.button(:value => 'View').click
于 2013-07-11T02:31:20.583 に答える
1

もっときれいな方法があるかもしれませんが、試してみます。

この単純化された HTML (つまり、ボタンの代わりにリンクを含む 2 列のテーブル) を想定すると、次のようになります。

<table id="foo">
  <tr><td><a href="http://www.example.com">View</a></td><td>Title One</td></tr>
  <tr><td><a href="http://www.iana.org/domains/reserved">View</a></td><td>Title Two</td></tr>
  <tr><td><a href="http://www.iana.org/numbers">View</a></td><td>Title Three</td></tr>
</table>

このコードは、書籍のタイトルをターゲットにすることで機能するはずです。

title = "Title Three"

trs = b.table(:id => "foo").rows
row_index = 0
trs.each do |tr|
  tr.each do |cell|
    if cell.text == title
      b.link(:text => "View", :index => "#{row_index}").click
      # alternately, using the fire_event method
      # b.link(:text => "View", :index => "#{row_index}").fire_event("onclick")
    end    
  end
  row_index += 1  
end
于 2013-07-11T00:28:51.397 に答える