2012-11-26 56 views
0

元素比方說,如果我有下面的代碼的倍數(每個不同形式的名稱,productForm_1,.._ 2 ..._ 3等):檢查和修改中引入nokogiri

<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

+2

AFAIK你不能做到這一點,並在任何情況下,你真的不應該這樣做。爲什麼要在集成測試中更改頁面上的ID? –

+0

您提出了多個問題,而不是一個問題。這造成了一系列混淆和可能相互衝突的答案,並有可能無法獲得答案並可能被關閉。 –

回答

0

有幾個問題與您的代碼:

  • 作爲shioyama指出,你不能改變一個隱藏字段的值。如果頁面確實發生了變化 - 如果頁面有一些腳本,那麼很可能會發生這種情況 - 您應該嘗試以與測試相同的方式觸發更改。
  • find_field查找字段不是表單。你的第一個發現是錯的,但你的第二個是正確的。改爲:page.find('#productForm_7').find_field("productID").value。 Capybaras通用查找方法默認使用CSS選擇器。以相同的方式,您可以使用按鈕的CSS類找到按鈕page.find('#productForm_7').find(".btn_addToCart").value

但是更capybaraish的風格是這樣的:

within '#productForm_7' do 
    # fill in values.... for example fill_in '#productID', :with => '123456' 
    find('.btn_addToCart').click 
end 
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