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

但这似乎根本不起作用。

*对不起,我是新来的水豚/nokogiri

4

2 回答 2

0

您的代码有几个问题:

  • 正如 shioyama 指出的那样,您不应该更改隐藏字段的值。如果它真的在页面上发生了变化——如果页面有一些脚本很可能——你应该尝试以与测试相同的方式触发更改。
  • find_field查找字段而不是表单。你的第一个发现是错误的,但你的第二个是正确的。尝试: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 回答