使用带有siteprism的capybara单击页面上具有相同类别的按钮

时间:2017-10-12 16:19:47

标签: ruby cucumber capybara site-prism

有20种不同的按钮需要点击,以期望并验证代码中的网址。我已经尝试了不同的方法来实现我的测试,但它们都失败了。

我尝试过类似的事情:

 page.all(:class => 'action red').each do |button|
   c = button.find(:class => 'action view red')
   c.click   
   page.driver.browser.switch_to.window(@new_window)
   expect('some element on those 20 different browsers sessions before closing them') 
   page.driver.browser.close
  end
end

我收到此错误:

  

ArgumentError:无效键:class,应该是:count,:minimum,   :maximum,:between,:text,:visible,:exact,:match,:wait

任何可以帮助我在代码中如何执行获取所有20个按钮的元素,存储它们并单击它们以在关闭它之前期望每个按钮

1 个答案:

答案 0 :(得分:0)

你的&#34;按钮&#34;不是按钮 - 因为它们是<a>元素,它们实际上是链接,样式看起来像按钮。

假设点击这些链接中的每一个实际上都会打开一个新窗口(因为您尝试切换到新窗口),那么代码就像

page.all(:link, class: ['action', 'red']).each do |link|
  win = page.window_opened_by { link.click }
  page.within_window(win) do
    expect(page).to ... # whatever you need to expect
  end
  win.close()
end

请注意,这并不使用任何特定于驱动程序的(.driver.browser ...)方法 - 您应尽可能远离它们,因为它们通常是您做错事的标志。此外,:class选项并非普遍适用于所有Capybaras内置选择器类型,直到v2.10,因此您需要使用较新版本的Capybara。