我正在测试的网站右侧是垂直登录表单,底部是水平表单。两者都具有相同的名称"电子邮件"和#34;密码"领域。因此,我正在使用capybara within
来研究我感兴趣的领域。网页形式的有趣内容如下所示:
我有两个独立的项目,我正在试验自动化酱实验室。第一个项目是仅限水豚的示例,经过修改以测试上面显示的页面。第二个项目是完全相同测试的黄瓜实现。这些是非常简单的一次性硬编码测试,只是为了获得两种技术的概念证明。
以下是仅限水豚的例子:
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"
我可能需要在黄瓜版中加入额外的水豚宝石吗?
答案 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}}方法。
不是肯定这是答案,但你可以随时试一试。