2012-06-29 44 views
20

我在軌道3.2.3和水豚使用ruby來幫助創建請求規格。我的目標是創建一個測試註銷的spec請求。該網頁:如何在rspec中使用水豚點擊下拉選項

<li class="dropdown"> 
    <a class="dropdown-toggle" data-toggle="dropdown"> 
    Welcome <%= current_user.first_name + " "+ current_user.last_name%> 
    <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
    <a href="#"> 
     <%= link_to "Sign out", destroy_user_session_path, :method => :delete%> 
    </a> 
    </ul> 
</li> 

爲了試驗,我有

describe "sign out" do 
    it "should let user to sign out" do 
    login_as user, :scope => :user 
    # click_on "Welcome #{user.first_name} #{user.last_name}" 
    # Now click on Sign out 
    end 
end 

我不知道如何使用水豚登出點擊,因爲它是在一個下拉菜單,因此不可見在頁面上。有人知道嗎 ?

是否有任何其他方式點擊下拉菜單中的元素?

+0

我已經通過選擇特定鏈接標記解決了同樣的問題(在Twitter Bootstrap按鈕的下拉菜單中): 'find('a',:text => option_title).click' –

回答

5

你好,我終於明白了。我不得不使用xpath找到鏈接。基於以上html,這裏是我做過什麼:

在rspec的,我寫道:

page.find(:xpath, "//a[@href='/users/sign_out']").click 

我用 「//一個[@href = '/用戶/ SIGN_OUT']」 的原因是因爲link_to "Sign out", destroy_user_session_path, :method => :delete在網頁上被編譯爲<a href="https://stackoverflow.com/users/sign_out" ...

而且它可以工作的方式:-)

哦,我發現這個有用的鏈接:http://www.suffix.be/blog/click_image_in_link_capybara

+0

我已經能夠測試一個非常類似的下拉列表,只需點擊兩下,一個打開下拉菜單,一個點擊鏈接。 – DVG

+1

這就是我的想法。你可以發佈一些代碼嗎?如果可以將它應用於上面的html,那將會很棒。謝謝。 – qusr

+0

我相信這裏缺失的部分是爲請求規範啓用Javascript;通常是capybara-webkit(https://github.com/thoughtbot/capybara-webkit)。啓用此功能後,點擊次數將會隨着瀏覽器的運行而起作用。 –

7

我測試過一個下拉只要通過點擊這兩個鏈接

click_link "Welcome #{current_user.first_name} #{current_user.last_name}" 
click_link 'sub link' 
+0

你如何點擊鏈接「下拉鍊接」。 – qusr

+0

增加了一些代碼 – DVG

+5

,這是行不通的。 – qusr

4

一個更更簡單的解決方案是這樣的:

select(「您想從菜單中選擇的選項」,:from =>「label name」)

注意:「標籤名稱」是<label>的實際文本。不過,您也可以在這裏使用<select>的「id」或「name」屬性,我認爲這樣更好,因爲您可能在某個時候更改標籤文本,如果這樣做,測試仍會通過。

+2

」選擇「不適用於非HTML選擇框元素。問題是關於「按鈕下拉菜單」(如Twitter靴子一個),這不是HTML選擇框。 –

+2

這個答案實際上解決了問題的標題。我猜這就是爲什麼它擁有最多的選票。 –

+1

代碼不是選擇,它是引導程序的註銷代碼。所以選擇不起作用 – Dean

1

我給這家

find("ol.nya-bs-select.btn-default.form-control[ng-model='scope.values.countries']") 
    .find_button("Nothing selected").click 
1

比如我有一個類似的問題,但我的下拉沒有任何文字,只有圖標:

%li#user-menu.dropdown 
    %a.dropdown-toggle{ href: "#", data: { toggle: "dropdown" }, role: "button", aria: { haspopup: "true", expanded: "false" } } 
    %i.fa.fa-user 
    %span.caret 
    %ul.dropdown-menu 
    %li.logout-text= link_to "Log Out", destroy_user_session_path, :method => :delete 

在我的天賦我用:

def when_I_sign_out 
    find('#user-menu').click 
    click_on 'Log Out' 
end