如何在有和没有javascript的情况下运行黄瓜场景,避免代码重复

时间:2012-06-06 07:29:24

标签: ruby testing selenium cucumber capybara

我想知道是否有办法在没有重复代码的情况下使用和不使用javascript运行黄瓜方案。

我开发利用html5导航的网站。但是,如果浏览器不支持html5功能,它应该可以找到。

我想写黄瓜测试,测试导航。 我知道我可以用简单的黄瓜方案测试基本的html导航。我可以使用相同的方案测试html5导航,但使用@javascript标记。

我真的很想避免这种代码重复。 我正在试验周围的钩子,希望我可以简单地调用块,然后用

调用相同的块
Capybara.using_driver(Capybara.javascript_driver) { block.call }

然而这不起作用。

任何人都知道如何实现这个目标?

P.S。 我对Ruby很陌生,刚开始使用黄瓜。

3 个答案:

答案 0 :(得分:1)

看起来你需要两种不同的场景。我使用Background功能来避免步骤定义,但这只是一种品味问题。

答案 1 :(得分:1)

根据Jon M使用环境变量的解决方案,您需要在每个场景运行之前设置current_driver(这似乎比更改default_driver更好)。

Before do
  if ENV['USE_JS_DRIVER']
    Capybara.current_driver = Capybara.javascript_driver
  end
end

然后运行

cucumber .
USE_JS_DRIVER=1 cucumber .

答案 2 :(得分:0)

如果您不想创建单独的功能来处理这两种类型的浏览器,那么一种解决方案是使用环境变量来告诉黄瓜使用哪种类型的浏览器驱动程序,并调用黄瓜两次。

您需要查询环境变量以设置正确的驱动程序,可能在env.rb中:

if ENV['USE_JS_DRIVER']
    Capybara.current_driver = Capybara.javascript_driver
end

然后你可以运行两者之一:

cucumber .
USE_JS_DRIVER=1 cucumber .

你必须找到一些有用的方法来合并两个黄瓜运行的结果,但根据你的需要,这可能是一个比重复你的场景更简单的解决方案。