gpt4 book ai didi

ruby - 在不使用单例模式的情况下在 cucumber 测试失败时实例化 watir 浏览器

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:41 24 4
gpt4 key购买 nike

我一直在尝试创建一个 "cucumber seed" project我可以用它来快速引导基于浏览器的验收测试套件。 Alister Scott has written关于不断关闭和重新打开浏览器窗口的常见反模式(这给测试套件增加了不必要的延迟),可以通过将以下内容添加到 env.rb 文件中来避免:

browser = Watir::Browser.new

Before do
@browser = browser
end

at_exit do
browser.close
end

但我不确定如何合并此行为,同时在测试失败时仍然重新启动浏览器(这确保失败的测试不会泄漏浏览器状态并导致不相关场景的级联故障)。

我目前的方法是将 Watir::Browser 实例化包装在 Browser 单例类中,如下所示:

# support/browser.rb

class Browser
class << self
def instance
@browser
end

def start(name: 'chrome')
@name = name
@browser = Watir::Browser.new(name.to_sym)
end

def stop
@browser.close # if a page hangs this will fail with a selenium unknown error
rescue Selenium::WebDriver::Error
puts 'Failed to close old browser (possibly because page is hanging), starting new one!'
end

def restart
stop
start(name: @name)
end
end # singleton methods
end

然后像这样在我的 env.rb/hooks 文件中调用它:

Browser.start

Before do
@browser = Browser.instance
end

After do |scenario|
Browser.restart if scenario.failed?
end

at_exit do
Browser.stop
end

哪个有效,但是有没有更好的方法来编写它?也许可以避免使用单例?

最佳答案

如果应用程序不稳定,我认为这种方法不会有用。我建议创建一个新的浏览器实例并在场景结束时将其关闭。

关于ruby - 在不使用单例模式的情况下在 cucumber 测试失败时实例化 watir 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com