2011-08-03 51 views
31

我已經通過水豚的崗位+點擊警戒框,但似乎沒有工作。以下是我的場景:Rspec +水豚:如何點擊警戒框

場景:當我點擊更新按鈕出現一個警告框,其中包含「確定」和「取消」按鈕。點擊「確定」,然後出現新表單。

  1. 我正在寫請求規格,即使用rspec和水豚。主要的問題是點擊提示框:以下是我的代碼:

    context "update" do 
        before(:all) do 
        Capybara.current_driver = :selenium 
        end 
        after(:all) do 
        Capybara.use_default_driver 
        end 
    
        it "update user to trainer" do 
        click_button('Search') 
        sleep 3 
        page.evaluate_script('data-confirm = function() { return true; }') 
        page.click('OK')  
        click_button('Upgrade') 
        end 
    end 
    

    但執行腳本給了我以下錯誤:

    Failure/Error: page.evaluate_script('data-confirm = function() { return true; }') Selenium::WebDriver::Error::UnexpectedJavascriptError: invalid assignment left-hand side # ./spec/requests/user_upgrades_spec.rb:30

  2. 對於第二個例子即

    page.driver.browser.switch_to.alert.accept

    我的代碼:

    context "update" do 
        before(:all) do 
        Capybara.current_driver = :selenium 
        end 
        after(:all) do 
        Capybara.use_default_driver 
        end 
        it "update user to trainer" do 
        click_button('Search') 
        sleep 3 
        click_button('Upgrade') 
        page.driver.browser.switch_to.alert.accept 
        end 
    end 
    

我得到錯誤:

Failure/Error: page.driver.browser.switch_to.alert.accept Selenium::WebDriver::Error::UnhandledError:

請讓我知道如何着手進一步

+0

你不能說出一個JavaScript用破折號變量。 'data-confirm = function ...'是非法的。它看起來像'(foo - bar)= function(){...}'。這是'左側#... user_upgrades_spec.rb:30'錯誤。用camelCase命名你的JavaScript變量。 –

+0

http://stackoverflow.com/questions/27384040/test-alert-dialog-text-using-capybara-webkit-1-3-1 –

回答

23

您可以點擊這樣一個對話框:

page.driver.browser.switch_to.alert.accept 
+3

非常感謝feedback.but我已經使用上面的代碼,但沒有成功。 –

+3

不適用於我;另外,我相信這個問題明確地解決了這個方法(參見上面列出的錯誤信息)。所以答案似乎表明,使用這個問題已經說明的問題在他目前的設置中並不適用於Amit。考慮到問題的背景,我必須投票。對不起。< – kikuchiyo

+0

使用水豚(1.1.2)適合我。 – gucki

11

,如果你想試試這條線點擊警告框的確定按鈕:

page.evaluate_script('window.confirm = function() { return true; }') 

不要忘了你的測試使用JavaScript標誌

it "update user to trainer", js: true do 
    ... 
end 

標記,並允許Capybara.javascript_driver:WebKit的還是:硒在spec_helper文件

+0

與Capybara-Webkit兼容:) – moeabdol

21

更新答案在這裏,因爲上面的選擇似乎都已被棄用。

Capybara :: Session#accept_alert似乎是現在最好的方法來實現這一點,其中將觸發警報的動作應該在一個塊中傳遞。 http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert

例如爲:

page.accept_alert 'Alert text here' do 
    click_button('Search') 
end 
+1

雖然每個文檔都是'Capybara :: Session'的方法,但我得到了一個未定義的方法'accept_alert'作爲#。有什麼想法嗎? – james

+0

你能否包含代碼片段? –

+0

page.accept_alert do click_button「submit」 end – james

10
page.accept_alert 

爲我工作使用Selenium。其他驅動程序可能會有自己的語法。

正如Jillian Foley所說,似乎其他答案已被棄用。

+2

As @ b-7提到了其他驅動程序,在撰寫本文時,PhantomJS的Poltergeist驅動程序尚不支持'accept_alert'。 –

+1

太棒了!爲我工作得很好! @B七 – Aravin

7

對於WebKit的:

page.accept_confirm { click_button "Upgrade" } 

硒:

page.driver.browser.switch_to.alert.accept 
0

我知道這是舊的,但現在這樣的吵鬧鬼也工作:

page.accept_alert