2015-03-31 5 views
7

Sto utilizzando Capybara e Chrome come browser predefinito per il selenio.Rails + Capybara: "Avviso inatteso aperto" per driver Selenium

prova:

it "is successful with deleting a user", js: true do 
    visit '/users' 
    expect(User.count).to eq(1) 
    expect(user.email).to eq("[email protected]") 
    expect(page).to have_content("Manage Users") 
    click_link 'Delete User' 
    page.driver.browser.confirm.accept 
    user.reload 
    visit '/users' 
    expect(User.count).to eq(0) 
end 

sto ricevendo questo errore per la mia prova:

Failure/Error: visit '/users' 
Selenium::WebDriver::Error::UnhandledAlertError: 
    unexpected alert open 

Ho provato quanto segue nel mio test:

page.driver.browser.switch_to.confirm 
page.driver.browser.switch_to.accept 
page.driver.browser.confirm.accept 

Eventuali altre varianti I dovrei provare con il mio test?

risposta

14

Provare avvolgendo il codice che avvierà la richiesta di allarme all'interno di un blocco accept_alert, in questo modo:

it "is successful with deleting a user", js: true do 
    visit '/users' 
    expect(User.count).to eq(1) 
    expect(user.email).to eq("[email protected]") 
    expect(page).to have_content("Manage Users") 

    # Change is here: 
    accept_alert do 
    click_link 'Delete User' 
    end 

    user.reload 
    visit '/users' 
    expect(User.count).to eq(0) 
end 

Sono un po 'preoccupato del fatto che si vorrebbe utilizzare un avviso, piuttosto che una conferma quando si eliminano una risorsa, ma dipende da te. Un avviso ti dirà che qualcosa sta per accadere, nel frattempo una conferma consente all'utente di cambiare idea premendo Annulla invece di OK. Se si utilizza un modal di conferma anziché un modal di avviso, la parte accept_alert dovrebbe essere modificata in accept_confirm.

Check out the modal documentation rubydoc per ulteriori informazioni.