2015-09-24 61 views
2

我有一個測試,應該從我的病人列表中選擇一個病人。如果我運行沒有js: true的功能測試,它工作得很好。水豚與js司機不會產生選擇選項

問題是,我選擇病人後,我也必須執行更改JavaScript事件。如果我使用任何JS驅動程序(無論是硒或水豚,WebKit的)我的測試失敗說明:

Unable to find option "Patient #1" 

我試圖從問題Capybara with :js => true causes test to fail去除DatabaseCleaner和解決方案。

RSpec.feature "Select patient", type: :feature do 
    background do 
    create(:patient) 
    login_as create(:user) 
    visit root_path 
    end 

    scenario "User selects a created patient", js: true do 
    select("Patient #1", from: 'clinical_event_patient_id') 
    end 
end 

我也試過了background設置js: true現在爲止,我沒有成功。

+0

你肯定選擇是對的看法?您是否嘗試使用save_and_open_page或save_screenshot在您的網頁上查看? 如果你有一個js邏輯來顯示這個下拉菜單,有時會發生select和邏輯之間的時間差,以顯示驗收測試中的下拉菜單。 – alexwbuschle

+0

我用硒打開瀏覽器和pyr來暫停它。選擇菜單與提示選擇一起存在,但其他選項不存在。 – sanny

+0

請顯示您的數據庫清潔配置 - 您需要使用截斷測試與js:true –

回答

0

我認爲這是因爲當Capybara試圖選擇這個選項時,選擇還沒有填充,因爲水豚2是一個智能等待算法,等待2秒的默認時間,然後拋出一個元素wasn沒有發現。

您可以增加此時間爲5秒例如,看看元素現在被裝載或不

Capybara.default_max_wait_time = 5 

參考:http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara%2FNode%2FFinders%3Afind

同時嘗試使用page.select

page.select("Patient #1", from: 'clinical_event_patient_id') 

另一個這是一個很好的做法,不要在你的測試中使用靜態ID,如果它們是你剛創建的對象Patient #1避免以前的記錄是否被刪除的問題或沒有,所以你background塊添加

@patient = create(:patient) 

然後在您的選擇

page.select("Patient ##{@patient.id}", from: 'clinical_event_patient_id') 
+0

感謝提示靜態ID,但您提出的解決方案不會改變。奇怪的是,患者記錄確實被創造出來了,但是有了js:由於某種原因,它不會被放入選擇。 – sanny

+0

如果您在測試結束時添加了'save_and_open_page',您是否看到填充在html上的選擇?您是否也可以在代碼中填寫患者填寫選擇字段的代碼 – bigsolom