[英]Unable to locate element with cucumber step_definition, but able to locate it with capybara stand-alone
我正在測試一個網站,該網站的右側既有垂直登錄表單,又有底部有水平登錄表單。 兩者都有相同名稱的“電子郵件”和“密碼”字段。 所以我采用水豚的within
,以余地我感興趣的領域的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
當我運行僅限水豚的版本時,一切工作正常。 填寫表格,並發送電子郵件確認。
但是,當我運行Cucumber版本時,出現此錯誤:
Unable to find css ".right-container.login-form" (Capybara::ElementNotFound)
怎么會這樣? 這是完全相同的頁面,完全相同的capybara方法( within
,使用:css
選擇器),以及完全相同的測試代碼。 我沒有得到什么(除了我可能認為這是錯誤的事實之外)?
哦,這是sauce_helper中的需求列表:
僅限水豚的版本:
require "sauce"
require "sauce/capybara"
require 'capybara/rails'
require 'capybara/rspec'
黃瓜版本:
require "sauce"
require "sauce/capybara"
require "sauce/cucumber"
我是否可能需要在黃瓜版本中包含額外的水豚寶石?
好的,我很尷尬地承認這一點,但是這個問題的原因是對Webdriver行為的無知,至少在與Capybara / Cucumber兼容的情況下如此。
有問題的測試是一組方案中的第二個方案。 顯然,在每種情況下,硒都會將瀏覽器重置為空白。 因此,測試一個完美地工作了,但是測試2,三個等等在ElementNotFound上失敗了,因為……當然,所討論的頁面甚至沒有被加載。
我在支持路徑中的hooks.rb
文件中添加了一個Before
鈎子,現在可以使用了。
道歉讓問題流混亂...
嘗試在“黃瓜版本”中添加require 'capybara'
require 'sauce'
之前添加require 'capybara'
”
從醬GitHub
## In your test or spec helper
require "capybara"
require "sauce/capybara"
推理within
來電find
。 Sauce會檢查查找方法是否已定義,如果是,則創建它自己的別名,稱為base_find
如果base_find
,則使用與水豚不同的自己的find
方法。 我認為他們可能與您的問題有關,因為它使用的是sauce
的find
方法。
不是肯定的,這就是答案,但是您可以隨時嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.