4

所以这段代码工作得很好,直到我最近更新了我的 selenium 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 ... | |
4

1 回答 1

17

我猜你不仅更新了 Webdriver,还更新了 Capybara。

Capybara 2.1 现在使用驱动程序的 CSS 选择器实现。在 Selenium Webdriver 的情况下,这意味着使用了浏览器的实现。:first伪选择器不是标准的,并且不受浏览器支持,因此您的 CSS 选择器无效。

以前它之所以有效,是因为 Capybara 使用 Nokogiri 将 CSS 选择器转换为 XPath。Nokogiri 支持:first伪选择器。

因此,您应该将无效的 CSS 选择器更改为有效的内容,例如:

  • page.first(:css, 'li').click
  • page.find(:css, 'li', match: :first).click(前一个变体和这个变体之间的区别在于,这个变体等待元素出现在页面上,但第一个不等待。请参阅Capybara README 的这一部分以获取更多信息match
  • page.find(:css, "li:first-child").click
  • page.find('li:first-child').click
于 2013-05-26T18:14:30.590 回答