2013-05-26 46 views
3

所以此代碼工作完全正常,直到我最近更新了我的硒的webdriver:如何從下拉列表中選擇第一個元素。回報率/水豚/硒

When /^I search for (.*)$/ do |term| 
    term = " " if term == "blank" 
    step "I fill in search with #{term}" 
    within(".navbar-search") do 
     page.find(:css, "li:first").click 
    end 
end 

我更新了,現在我得到以下錯誤:

An invalid or illegal string was specified (Selenium::WebDriver::Error::UnknownError) 
    ./features/step_definitions/search_steps.rb:5:in `block (2 levels) in <top (required)>' 
    ./features/step_definitions/search_steps.rb:4:in `/^I search for (.*)$/' 
    features/search_friend.feature:13:in `When I search for <term>' 

這裏黃瓜功能:

@javascript 
Scenario Outline: The search bar 
    Given I login 
    And I have a contact named ABC 
    And I have a contact named DEF 
    And I have a contact named GHI 
    When I search for <term> 
    Then I should see the message <message> 

    Examples: 
    | term | message | 
    | ... some examples ... | | 

回答

11

我想你不僅更新了Webdriver,還更新了水豚。

Capybara 2.1 now uses driver's implementation of CSS selectors。在Selenium Webdriver的情況下,這意味着使用瀏覽器的實現。 :first僞選擇器不是標準的,並且不受瀏覽器支持,因此您的CSS選擇器無效。

此前它的工作原因是Capybara使用Nokogiri將CSS選擇器轉換爲XPath。 Nokogiri支持:first僞選擇器。

所以您應將無效CSS選擇器切換到喜歡的東西有效:

  • page.first(:css, 'li').click
  • page.find(:css, 'li', match: :first).click(以前的變種,這之間的區別是,這種變異等待元素出現在頁面上,但第一個不等待,見this section of Capybara README獲得的match更多信息)
  • page.find(:css, "li:first-child").click
  • page.find('li:first-child').click
+0

第一個選項沒有工作,第二個沒有。非常感謝你。 – wachichornia

+0

@wachichornia我想第一個變體不起作用,因爲它不等待元素出現在頁面上。我的猜測是正確的嗎? –

+0

它沒有找到它,這意味着它不會等待。你是對的。 – wachichornia

相關問題