0

次のコードの倍数がある場合を考えてみましょう(それぞれ異なるフォーム名、productForm_1、.._ 2 ... _3など):

<form id="productForm_7" name="productForm_3" method="post" action="/send/coded.cfm" style="width:110px; display:inline;">    
<div>
    <input type="hidden" value="24775643" name="productID">
    <input class="btn_addToCart" type="submit" value=" " style="cursor:pointer;">
</div>
</form>

capybara-webkitでproductIDを変更するにはどうすればよいですか?ボタンには名前/値がないので、ボタンを指定するにはどうすればよいですか?

私は試した

page.find_field('productForm_7').find_field("productID").value

しかし、それはまったく機能していないようです。

*申し訳ありませんが、私はカピバラ/ノコギリに不慣れです

4

2 に答える 2

0

コードにはいくつかの問題があります。

  • 塩山が指摘したように、隠しフィールドの値を変更するべきではありません。ページ上で実際に変更された場合(ページにスクリプトが含まれている場合はかなり可能です)、テストと同じ方法で変更をトリガーするようにしてください。
  • find_fieldフォームではなくフィールドを検索します。最初の発見は間違っていますが、2番目の発見は正しいです。page.find('#productForm_7').find_field("productID").value代わりに:を試してください。Capybarasの汎用findメソッドは、デフォルトでCSSセレクターを使用します。page.find('#productForm_7').find(".btn_addToCart").value同様に、ボタンのCSSクラスを使用してボタンを見つけることができます。

ただし、よりキャピバラ風のスタイルは次のようなものです。

within '#productForm_7' do
  # fill in values.... for example fill_in '#productID', :with => '123456'
  find('.btn_addToCart').click
end
于 2012-11-26T10:40:59.660 に答える
0

あなたがやりたいことをするための簡単な方法:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<form id="productForm_7" name="productForm_3" method="post" action="/send/coded.cfm" style="width:110px; display:inline;">    
<div>
    <input type="hidden" value="24775643" name="productID">
    <input class="btn_addToCart" type="submit" value=" " style="cursor:pointer;">
</div>
</form>
EOT

doc.search('form').select{ |form| form['id'][/productForm_\d+/] }.each do |form|
  hidden_input = form.at('input[name="productID"]')
  hidden_input['value'] = (hidden_input['value'].to_i + 1).to_s
  button = form.at('input.btn_addToCart')
  # do something with button...
end
于 2012-11-26T14:53:34.553 に答える