2013-01-02 20 views
1

我正嘗試在使用Capybara-webkit的無頭模式下運行簡單的Google搜索測試。使用Capybara webkit時發現元素錯誤,但測試在非無頭模式下正常運行

我已經設置了司機在env.rb文件:

Capybara.default_driver = :webkit 
Capybara.current_driver = :webkit 
Capybara.javascript_driver = :webkit 

和特徵文件有一個簡單的場景輪廓,其搜索的輸入,並驗證結果是否包含預期輸出:

Given User opens the google page 
    When she searches for "<input>" 
    Then verify that the result has "<output>" 

    Examples: 
    |input     | output   | 
    |Agile Samurai author name|Jonathan Rasmusson| 
    |Eloquent Ruby author name|Russ Olsen  | 

在步驟定義中,訪問google頁面並將輸入輸入到文本框中並單擊搜索按鈕。

Given /^User opens the google page$/ do 
    visit "http://google.com" 
end 

When /^she searches for "(.*?)"$/ do |search_query| 
     fill_in "gbqfq", :with => search_query 
     click_button "gbqfba" 
end 

Then /^verify that the result has "(.*?)"$/ do |output| 
     should have_content output 
end 

當我運行這些測試,我得到的錯誤:

Unable to find field "gbqfq" (Capybara::ElementNotFound)

但是,如果我改變司機硒:

Capybara.default_driver = :selenium 
Capybara.current_driver = :selenium 
Capybara.javascript_driver = :selenium 

然後,測試運行,所有的步驟通過。

在無頭模式下,是否以其他方式找到元素? 我的方法錯了嗎?我無法理解爲什麼在瀏覽器模式下工作正常(打開firefox實例)時無法在無頭模式下找到該元素。

我是這個領域的新手,所以任何幫助都會深表謝意。 預先感謝您。

回答

0

您的click_button行似乎有按鈕的錯誤id

它應該是:

click_button "gbqfba" 

所以你的線條變成:

fill_in "gbqfq", :with => search_query 
click_button "gbqfba" 

我不知道這是否會幫助,但它是值得一試。

2

我用puts page.html打印出源代碼。我發現源代碼對於無頭模式是不同的。

這是瀏覽器模式下的文本框源代碼的一部分:

<input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q"> 

這是無頭模式文本框源代碼的一部分:

<input class="lst" spellcheck="false" dir="ltr" title="Google Search" value=""> 

由於ID不存在於無頭模式源代碼中,測試失敗。 如果在兩種模式中都有一些共同的名稱,請將其用於測試。

我不知道爲什麼會發生這種情況。但谷歌可能會根據頭部或無頭模式加載不同的頁面。

我嘗試了其他幾個網站,例如flipkart.com,它們都可以在這兩種模式下工作。即身份證等在兩種模式下都是相同的。

所以,問題中的代碼沒有問題。只需要使用兩種模式中都存在的ID。

相關問題