4

와 경고 상자를 허용하는 방법 :기다린 내 RSpec에 시험에 다음 코드를 사용하고 카피 바라/셀레늄

describe "Save should create a BasketItem and a Basket" do 
    subject { 
    lambda { 
     click_button I18n.t(:create_basket_and_add_items) 
     page.driver.browser.switch_to.alert.accept # close the alert box 
    } 
    } 
    it { should change(BasketItem, :count).by(1) } 
    it { should change(Basket,  :count).by(1) } 
end 

click_button 화재 경고 팝업 창을 표시하는 눈에 거슬리지 자바 스크립트 호출. 그러나 알림 상자를 닫는 것은 테스트 실행의 약 50 %에서만 성공적으로 수행됩니다. 왜냐하면 경고 상자가 항상 명령시 이미 화면에 있지 않기 때문입니다. page.driver.browser.switch_to.alert.accept이 실행 중입니다. 경고 상자가 닫히지 않으면 다음 테스트 케이스가 물론 "시간 초과 오류"로 실행됩니다.

sleep 1click_button에서 ...alert.accept 사이로 사용하면 항상 올바르게 작동하지만 아주 좋은 해결책은 아닙니다. 어떤 생각?

답변

16

여기 제가 사용 해본 코드가 있습니다.

wait = Selenium::WebDriver::Wait.new ignore: Selenium::WebDriver::Error::NoAlertPresentError 
alert = wait.until { page.driver.browser.switch_to.alert } 
alert.accept 
1
expect{ 
    accept_alert "Are you sure?" do 
    click_link "Destroy" 
    end 
    sleep 1.second # !important 
}.to change(Post, :count).by(-1) 
관련 문제