无法使用黄瓜step_definition定位元素,但能够使用独立的capybara找到它

时间:2014-04-07 16:36:05

标签: ruby-on-rails ruby cucumber capybara saucelabs

我正在测试的网站右侧是垂直登录表单,底部是水平表单。两者都具有相同的名称"电子邮件"和#34;密码"领域。因此,我正在使用capybara within来研究我感兴趣的领域。网页形式的有趣内容如下所示:

enter image description here

我有两个独立的项目,我正在试验自动化酱实验室。第一个项目是仅限水豚的示例,经过修改以测试上面显示的页面。第二个项目是完全相同测试的黄瓜实现。这些是非常简单的一次性硬编码测试,只是为了获得两种技术的概念证明。

以下是仅限水豚的例子:

within(:css, ".right-container.login-form") do
    fill_in 'email', :with => "greg.gauthier+#{generate_email_suffix}@website.com"
    fill_in 'password', :with => 'l33tP@$$w0rd'
    click_button 'Submit'
end

以下是黄瓜step_definition的有趣内容:

When(/^The user enters his information$/) do
    within(:css, ".right-container.login-form") do #the page has duplicate forms
        fill_in 'email', :with => "greg.gauthier+#{generate_email_suffix}@website.com"
        fill_in 'password', :with => 'l33tP@$$w0rd'
        click_button 'Submit'
    end
end

当我运行仅限水豚版本时,一切都很好。填写表单,并发送电子邮件确认。

然而,当我运行黄瓜版本时,我收到此错误:

Unable to find css ".right-container.login-form" (Capybara::ElementNotFound)

这怎么可能?它是完全相同的页面,完全相同的水豚方法(within,使用:css选择器),以及完全相同的测试代码。我没有得到什么(除了I'm probably cuking it wrong)?

哦,这里有一个需求列表在sauce_helper中的样子:

Capybara-only版本:

require "sauce"
require "sauce/capybara"
require 'capybara/rails'
require 'capybara/rspec'

黄瓜版:

require "sauce"
require "sauce/capybara"
require "sauce/cucumber"

我可能需要在黄瓜版中加入额外的水豚宝石吗?

2 个答案:

答案 0 :(得分:1)

好吧,我很尴尬地承认这一点,但这个问题的原因是无知webdriver的行为,至少与Capybara / Cucumber合作。

有问题的测试是一组场景中的第二个场景。显然,selenium会在每个方案之间将浏览器重置为空白。因此,测试一个工作完美,但测试二,三,等等在ElementNotFound上失败,因为,当然...有问题的页面甚至没有加载。

我在支持路径中的Before文件中添加了hooks.rb个挂钩,现在它正在运行。

抱怨问题流的混乱......

答案 1 :(得分:0)

尝试在您的" Cumcumber版本"

中添加require 'capybara' require 'sauce'之前的## In your test or spec helper require "capybara" require "sauce/capybara"

来自酱GitHub

within

推理find来电base_find。 Sauce检查是否定义了find方法,如果是,那么它创建它自己的名为find的别名,如果不是它使用它自己的sauce方法不同作为水豚的。我认为它们可能与您的问题有关,因为它使用的是find {{1}}方法。

不是肯定这是答案,但你可以随时试一试。