2012-09-04 46 views
56

對於HTML水豚:選擇由值的選項不是文字

<select id="date"> 
    <option value="20120904">Tue 4 Sep 2012</option> 
    <option value="20120905">Wed 5 Sep 2012</option> 
    <option value="20120906">Thu 6 Sep 2012</option> 
</select> 

我有以下的水豚Ruby代碼:

select "20120905", :from => "date" 

但這個錯誤有:

cannot select option, no option with text '20120905' in select box 'date' (Capybara::ElementNotFound) 

然而,如果我做

select "Wed 5 Sep 2012", :from => "date" 

沒關係。

是否可以在水豚選擇一個選項價值不是文字

感謝

回答

66

這將工作選擇由值的選項:

find("option[value='20120905']").click 

爲了保持選擇的範圍,你可以區塊內包裝在一個這樣:

within '#date' do 
    find("option[value='20120905']").click 
end 
+22

從Selenium切換到Poltergeist後發現此方法不起作用。因此被find('#select_id')。find('option [value =「1」]')取代。select_option對不起,英語不好。 – woto

+0

@woto所有這些選項都不適用於我。基本上這個選項沒有問題。我檢查了結果並找到了正確的選項,但它沒有點擊或選擇它。我認爲它需要在選擇選項之前先打開選擇。 –

4

你也可以做到以下幾點:

find_by_id('date').find("option[value='20120905']").click 
38

隨着鬼驅人作爲司機,我不能點擊的選項像在提出上面的一些其他的選擇,而不是你能做到以下幾點:

page.find_by_id('date').find("option[value='20120905']").select_option

+0

超級有用。我在spec/support/capybara.rb中創建了一個輔助方法:def select_option params id = params [:id] value = params [:value] page.find_by_id(id).find(「option [value ='# {value}']「)。select_option end – justingordon

+3

'click' cause for me'您試圖與之交互的元素不是DOM的一部分,或者當前不可見,但是'select_option'適用於我很好。謝謝! –

+0

這也是capybara-webkit的答案。 – dojosto

18

我寫了一個輔助方法:

/
def select_by_value(id, value) 
    option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" 
    option = find(:xpath, option_xpath).text 
    select(option, :from => id) 
end 

保存在規格/支持的.rb文件

使用例:

before do 
    select_by_value 'some_field_id', 'value' 
    click_button 'Submit' 
end 
+0

意圖揭示名稱,很好的實現。謝謝。 – slothbear

+0

這(仍然)似乎是唯一的版本,沒有JavaScript和有點獨立的驅動程序... – Patru

0

點擊使用find_field正常工作:

find_field("date").find("option[value='20120905']").click 
+0

它給了我錯誤。無法找到css「選項[value ='20120905']」 –

1

該助手方法很聰明。我想改變這一點:

def select_by_value(id, value) 

    option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" 

    find(:xpath, option_xpath).click 

或者只是:

find(:xpath, "//select[@id='date']/option[@value='20120904']").click 
0

你也可以使用capybara-ui它先來看看對文本匹配,則匹配值。

# define your form widget, in this case in a role 
class UserRole < Capybara::UI::Role 
    form :my_form do 
    select :my_select, 'my_select' 
    end 
end 

# then just submit your form params via #submit 
role = UserRole.new 

role.submit :my_form, my_select: '20120905' 

查看更多關於水豚形態here

1

在我的情況下,我有幾個選項與相同的文本,這就是爲什麼我需要選擇的價值。結合幾個答案我已經找到了最適合我的解決方案:

 
def select_by_value(id, value) 
    option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" 
    find(:xpath, option_xpath).select_option 
end