2016-05-02 92 views
-1

我使用3個選擇下拉從服務器(通過ajax)獲取數據。我想編寫一個集成測試,我需要等待ajax請求完成,然後從下一個下拉列表中選擇一個值。等待Ajax調用完成Capybara

到目前爲止,我在等待幾秒鐘,然後再進行下一次選擇,但這不可靠,也不是一個好的解決方案。

+0

https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara –

回答

0

我有意識到默認情況下capybara(最新版本)等待ajax完成,然後運行代碼中的下一行。我不需要做任何事情,只需一個選擇。

select 'VW', from: 'trademarks-dropdown' 
select 'Golf', from: 'models-dropdown' 
assert_equal 200, status_code 
+0

注:水豚實際上並不等待Ajax來完成 - 等待的選項元素出現。這是一個小技術性,但重要的是理解,因爲水豚不知道瀏覽器的請求,它知道的只是它在頁面上可以看到和看不到的東西。 –

0

當您要求它與它們交互時,Capybara會自動等待項目出現在頁面上。如果沒有足夠長的等待時間,你可以增加Capybara.default_max_wait_time或將:wait選項傳遞給大多數發現者/動作。

所以,如果你是阿賈克斯加載一個選擇框,你可以做

select('Item that is being loaded') 

和水豚會等待,直到Capybara.default_max_wait_time秒,以用於該文本的選項可供選擇。如果沒有等待足夠長的時間爲您的應用程序響應時間,你可以做

select('Item that is being loaded', wait: 10) 

然後將等待10秒出現在頁面上,然後在選項中選擇