是否可以在Integration Tests中的规范之间重新启动浏览器?

Art*_*yev 5 javascript selenium jasmine angularjs protractor

对于基于AngularJS的项目,我们有编号或量角器/茉莉花规格。可以这样做吗?

afterAll(function(){
   browser.restart();
}
Run Code Online (Sandbox Code Playgroud)

清理规格之间的东西?

ale*_*cxe 2

有一个内置设置 - restartBrowserBetweenTests

// If true, protractor will restart the browser between each test.
// CAUTION: This will cause your tests to slow down drastically.
restartBrowserBetweenTests: false,
Run Code Online (Sandbox Code Playgroud)

正如评论中所说 - 这会导致测试速度减慢 - 确保有真正的理由在测试之间重新启动浏览器。请注意,该设置意味着重新启动浏览器it(),而不是describe()

请注意,在内部restart()分叉现有驱动程序实例,退出当前驱动程序并重新初始化所有全局变量 - browserelement$

在测试之间可能有不同的需要重新启动浏览器/驱动程序 - 例如,以前创建的 cookie 将完全丢失/删除。例如,这可能允许在每次测试后不显式注销以节省时间(不确定这总体上是否良好)。


因此,作为快捷方式(直到我找不到承诺的真正问题),我想在每个规范之后重新启动浏览器。我知道这通常是一种错误的方法,但想将其用作临时解决方案。

作为您的情况的临时解决方案,为了强制执行测试隔离,我认为在每个测试套件之后重新启动浏览器是可以的。但是,请确保您不通过全局可用browser对象共享任何变量 - 在每次测试中,您都会获得一个全新的browser.


顺便说一句,您也可以尝试强制浏览器的私人/隐身模式:

multiCapabilities: [
    {
        browserName: "chrome",
        chromeOptions: {
            args: ["incognito", "disable-extensions"]
        },
     }
],
Run Code Online (Sandbox Code Playgroud)