【问题标题】:Capybara with js driver doesn't generate select options带有 js 驱动程序的 Capybara 不会生成选择选项
【发布时间】:2015-09-24 19:01:46
【问题描述】:

我有一个测试应该从我的患者列表中选择一个患者。如果我在没有js: true 的情况下运行功能测试,它会非常好。

问题是,在我选择了患者之后,我还必须执行一个更改 javascript 事件。如果我使用任何 js 驱动程序(无论是 selenium 还是 capybara-webkit),我的测试都会失败,说明:

Unable to find option "Patient #1"

我尝试从问题 Capybara with :js => true causes test to fail 中删除 DatabaseCleaner 和解决方案。

RSpec.feature "Select patient", type: :feature do
  background do
    create(:patient)
    login_as create(:user)
    visit root_path 
  end

  scenario "User selects a created patient", js: true do
    select("Patient #1", from: 'clinical_event_patient_id')
  end
end

我还尝试将js: true 设置为background,但到目前为止我没有成功。

【问题讨论】:

  • 您确定该选项在视图中吗?您是否尝试使用 save_and_open_page 或 save_screenshot 来查看您的页面?如果你有一个 js 逻辑来显示这个下拉菜单,有时会在选择和逻辑之间发生时间间隔来显示验收测试的下拉菜单。
  • 我使用 selenium 打开浏览器并使用 pyr 暂停它。选择菜单与提示选择一起出现,但不存在其他选项。
  • 请显示您的数据库清理配置 - 您需要使用截断来进行 js 测试:true
  • 正如我在问题中已经说过的那样,我尝试完全删除数据库清理器,但没有成功,以及互联网上显示的建议解决方案(使用 js:true)。确实创建了记录(患者),只是没有放入选择选项中。
  • 你不想删除数据库清理器,这是必要的。你怎么知道病人是在应用程序线程中创建和访问的?如果您使用基于事务的测试,则记录似乎是在测试线程中创建的,但实际上永远不会写入数据库,因此在应用程序线程中不可用所以正如我所问,请显示您的配置

标签: ruby-on-rails ruby rspec capybara


【解决方案1】:

我认为发生这种情况是因为当 Capybara 尝试选择此选项时尚未填充选择,因为 Capybara 2 实现了一种智能等待算法,该算法在引发元素不存在的异常之前等待默认时间 2 秒'没有找到。

例如,您可以将此时间增加到 5 秒,然后查看元素现在是否已加载

Capybara.default_max_wait_time = 5

参考:http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara%2FNode%2FFinders%3Afind

也可以尝试使用page.select

page.select("Patient #1", from: 'clinical_event_patient_id')

另外,如果静态 ID 用于您刚刚创建的对象 Patient #1,则最好不要在测试中使用它们,以避免先前记录是否被删除的问题,因此在您的 background 块中添加

@patient = create(:patient)

然后在您的选择中

page.select("Patient ##{@patient.id}", from: 'clinical_event_patient_id')

【讨论】:

  • 感谢您提供有关静态 ID 的提示,但您提出的解决方案没有任何改变。奇怪的是,确实创建了患者记录,但是使用 js: true 由于某种原因它没有被放入选择中。
  • 如果您在测试结束时添加了save_and_open_page,您是否看到生成的 html 中填充了选择?您是否也可以在您填写患者选择字段的位置发布代码
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多