使用 rspec 和 capybara 单击链接不会加载页面

问题描述 投票:0回答:2

在 Rails 3.2 中,我使用 rspec (2.11.0) 和 capybara 1.1.2(并且尚未安装 webrat),当我单击网页上的链接时,它会执行一些奇怪的操作。

我正在尝试单击主页上的链接转到另一个页面。以下是基本的 rspec 测试。

it "should go to agents page" do
  visit 'home'

  #puts page.body
  #links = page.all('a')
  #links.each do |l|
  #  puts l.text
  #end

  page.find_by_id('menu_agents').click

  puts page.body
  #<various content asserts on page currently commented out>
end

我基本上会进入一个页面,抓取一个链接并单击

链接存在。正如您从注释掉的语句中看到的那样,我通过查看控制台中的页面并查看链接列表确认了这一点。我尝试不仅单击上面的链接,还尝试使用

click_link
并引用 id。当我运行代码时,查看页面的代码和 html,我看到元素的 id。

在所有情况下我都会得到以下结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

使用

rails s
运行软件时,单击链接会加载正确的页面。同样,当我在测试中访问主页时,它也会正确加载,因为当我将正文打印到控制台时,我看到了正确的 html。

当我单击链接时,页面加载似乎出现问题,并且页面加载出现某种类型的失败(尽管测试本身没有失败)。有什么想法吗?

ruby-on-rails-3 testing rspec click capybara
2个回答
1
投票

请尝试这个:

页面加载需要一些时间。使用睡眠功能。这需要一些时间等待。

然后使用 page.find("#menu_agents").click 而不是 page.find_by_id('menu_agents').click

验证menu_agents ID名称不存在于结果页面的任何其他位置。

注意:确保menu_agents id是唯一的。

it "should go to agents page" do

  visit 'home'

  sleep 5

  page.find("#menu_agents").click

  puts page.body
  #<various content asserts on page currently commented out

end

0
投票

我的测试间歇性失败,因为有时水豚会在元素加载之前尝试单击某些内容,因此它找不到它并且测试会失败。

我重构了我的代码,告诉水豚在尝试单击该元素之前找到该元素。

这里有两个例子。我改变了这个:

click_button 'Submit' 
check('booking_accept_waiver')

对此:

find_button('Submit').click
find('input[type="checkbox"][id="booking_accept_waiver"]').check

现在水豚会等待这些元素出现后再与它们交互,并且测试不再间歇性失败。

© www.soinside.com 2019 - 2024. All rights reserved.