我有一项功能需要运行超过100个场景,第一步是登录我的应用程序。这通常使用Before
挂钩和After
挂钩来处理,它会将您注销。这使我的测试彼此独立,对我来说通常是一个好主意。但是在这种情况下,我只想登录我的应用程序,运行所有方案并注销。
我似乎遇到了会话问题,因为在方案完成后我被重定向到about:blank
并且我的会话被终止。
我已经尝试了
class Capybara::Selenium::Driver < Capybara::Driver::Base
def reset!
# Use instance variable directly so we avoid starting the browser just to reset the session
if @browser
begin
#@browser.manage.delete_all_cookies <= cookie deletion is commented out!
rescue Selenium::WebDriver::Error::UnhandledError => e
# delete_all_cookies fails when we've previously gone
# to about:blank, so we rescue this error and do nothing
# instead.
end
@browser.navigate.to('about:blank')
end
end
end
但是我在控制台中得到了以下错误
expected not to find xpath "/html/body/*", found ...
所以我的问题是如何完成一个场景,然后只需点击我网站中的另一个链接,然后进行下一个场景
由于
答案 0 :(得分:0)
这是一个很好的例子,说明何时使用Cucumber的Background功能是个好主意。
如果您让用户在后台标记内登录,他们将在所有后续方案中登录。
答案 1 :(得分:0)
希望这会在类似的情况下帮助其他人,但在阅读Poltergeist Docs之后我才能实现一个简单的解决方案
这就是我想出来的
Given(/^I setup the form with the correct template \- benchmarking$/) do
if !defined? $i == true
login_to_app
elsif page.current_url == "about:blank"
options = { domain: 'mydomain',
httponly: true,
name: 'name',
path: '/',
secure: true
}
page.driver.set_cookie("name", $session_cookie, options)
page.visit('url')
end
click_link('mylink')
wait_for_ajax
end
Then('This is my final step')
$i = 1
$session_cookie = page.driver.cookies["PHPSESSID"].value
end
所以在第一次迭代中$i
没有定义所以我可以登录,第二种情况它被定义,这意味着我可以根据最后一个会话设置cookie信息并访问我需要的页面我的应用程序使用与我登录时相同的凭据。