1

我正在测试一个在右侧有一个垂直登录表单,在底部有一个水平表单的网站。两者都有同名的“电子邮件”和“密码”字段。因此,我正在使用 capybarawithin来确定我感兴趣的领域。Web 表单中有趣的部分如下所示:

在此处输入图像描述

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

这是水豚专用示例的有趣之处:

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)

怎么会这样?这是完全相同的页面,完全相同的 capybara 方法(within使用:css选择器)和完全相同的测试代码。我没有得到什么(除了我可能弄错了)?

哦,这是 sauce_helper 中的 require 列表的样子:

水豚专用版本:

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

黄瓜版:

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

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

4

2 回答 2

1

好的,我很尴尬地承认这一点,但这个问题的原因是对 webdriver 行为的无知,至少它适用于 Capybara/Cucumber。

所讨论的测试是一组场景中的第二个场景。显然,selenium 在每个场景之间将浏览器重置为空白。因此,测试一完美运行,但测试二、三等在 ElementNotFound 上失败了,因为当然……有问题的页面甚至没有加载。

我在支持路径中的文件中添加了一个Before挂钩hooks.rb,现在它可以工作了。

抱歉弄乱了问题流...

于 2014-04-16T10:26:50.433 回答
0

尝试在“Cumcumber 版本”中添加require 'capybara'之前require 'sauce'

来自酱油 GitHub

## In your test or spec helper
require "capybara"
require "sauce/capybara"

推理within电话find。Sauce 检查是否定义了 find 方法,如果是,则它创建它自己的别名,base_find如果没有,它使用它自己的find方法,这与 capybara 的不同。我认为他们可能与您的问题有关,因为它使用的是sauce'sfind方法。

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

于 2014-04-07T18:06:29.003 回答