为什么水豚代码不适用于 selenium webdriver?

Why capybara codes don't work with selenium webdriver?

我是 Capybara 的新手。我有一个问题,为什么我的 Capybara 在与 Selenium Webdriver 一起使用时不起作用。

这是我的示例代码:

Given(/^I am on the Youtube homepage$/) do
  # visit 'http://www.youtube.com'
driver = Selenium::WebDriver.for :firefox
driver.navigate.to('http://www.youtube.com')
end

When(/^I search for "([^"]*)"$/) do |search_term|
  fill_in 'search_query', :with => search_term
  click_on 'search-btn'
end

Then(/^videos of large rodents are returned$/) do
  expect(page).to have_content 'Making Friends with a Capybara'
end

当我 运行 它时,它只是打开 Firefox 并转到 Youtube 主页。但它得到错误:

Capybara::ElementNotFound: Unable to find field "search_query"

一切都适用于 visit 'http://www.youtube.com' 命令。

您正在创建一个驱动程序,告诉它导航到一个页面,然后它超出范围,因此被删除。 visit 行之所以有效,是因为它使用的是当前的水豚驱动程序,该驱动程序在测试步骤之间保持不变。与其手动创建驱动程序,不如使用 Capybara 注册驱动程序,然后指定要用于特定测试的驱动程序。参见 drivers

由于 capybara 默认设置了一个用于 firefox 的 selenium 驱动程序,因此您只需

Capybara.default_driver = :selenium

在 运行 测试之前的某处使用 selenium 和 firefox 进行所有测试 运行,或者因为 capybara 将 selenium 注册为默认 javascript 驱动程序,您可以标记任何场景想要在 firefox 中使用 @javascript 运行,如图所示 here

@javascript
Scenario: do something something
Given ...