【问题标题】:Angular Protractor - Leave browser open after E2E testsAngular Protractor - 在 E2E 测试后保持浏览器打开
【发布时间】:2014-06-15 21:24:23
【问题描述】:

Angular Protractor 测试运行后是否可以让测试浏览器窗口保持打开状态?我有一个在 FireFox 中失败的艰难测试,访问网页的状态以查看发生了什么会很有用。

【问题讨论】:

    标签: angularjs protractor


    【解决方案1】:

    您可以使用 Protractor 调试/暂停功能来暂停 e2e 运行,这最终会使浏览器保持打开状态:more info here

    为此,请将此行添加到量角器测试中失败的测试之前

    browser.pause();
    

    还有一个非常有用的工具,叫做elementor,您以后可能想看看。

    【讨论】:

    • 这对我不起作用。输入“c”后,它只是通过所有测试并忽略 browser.debugger() 行。中断 timers.js:79 77 } 78 79 函数 listOnTimeout() { 80 var msecs = this.msecs; 81 变量列表 = 这个;调试> c
    • 如果它在没有调试器的情况下以同样的方式吹出,那么就是别的东西,与调试功能无关。
    • 通过“测试”我的意思是添加 browser.debugger() 行没有影响。
    • 使用browser.pause();elementor 尝试新的最新量角器
    【解决方案2】:

    browser.pause 不再适用于当前的 Node v8.1.0,请参阅 here,但您可以使用 browser.sleep(10000); 保持浏览器打开,例如10 秒

    【讨论】:

      【解决方案3】:

      如果您将测试脚本配置为使用 grunt 运行,则可以使用以下代码:

      grunt.initConfig({
          // ...
          protractor: {
            options: {
              configFile: "protractor.conf.js",
              keepAlive: true, // If false, the grunt process stops when the test fails.
              noColor: false // If true, protractor will not use colors in its output.
            },
            run: {}
          },
          // ...
        });
      

      【讨论】:

      • keepAlive 对我不起作用。但是,我可以使用browser.sleep(60e3); 阻止浏览器关闭一分钟
      【解决方案4】:

      如果您拥有 Node 8+,在尝试来自 the accepted answerbrowser.pause 解决方案时遇到问题 "Error: Cannot find module '_debugger'",并且您无法使用 this github solution 修复它,那么您可以按以下方式解决它:

      1. 将量角器安装为自动化框架的模块(即不带-g 标志)

        npm install protractor
        
      2. 也为这个量角器实例运行webdriver-manager update

        node ./node_modules/protractor/bin/webdriver-manager update
        
      3. 如果您的代码中有 browser.pause();,请将其替换为 debugger; 语句

      4. 按如下方式运行您的代码:

         node inspect ./node_modules/protractor/bin/protractor protractorConf.js
        

        protractorConf.js 是量角器实例的配置文件

      5. 如果debugger 在命令行等待您的输入,只需键入cont 并回车(以continue 执行)

      【讨论】:

        【解决方案5】:

        超级简单的解决方案,完全可以满足您的需要

        这个想法是,您并不是真的想保持会话活动,而是在测试完成后将其暂停很长时间,并能够随时恢复关闭过程

        所以只需将其添加到您的config.js

            async onComplete() {
                await browser.waitForAngularEnabled(false);
                await browser.wait(
                    async () => {
                        let url = await browser.getCurrentUrl();
                        return url.includes('close/');
                    },
                    5 * 60 * 1000,
                    'Keep-alive timeout reached, closing the session...',
                );
            },
        

        代码的作用是,在所有测试通过或失败后,它会等到您在浏览器的 url 字段中输入并提交 close/,或者在 5 分钟内超时。

        这里之所以需要await browser.waitForAngularEnabled(false);,是因为当你输入close/时浏览器会打开一个空白页面,这是非角的

        您甚至可以根据传递给量角器配置的参数对其进行改进并使其有条件

        【讨论】:

        • 但是,如果您想在出现错误时停止浏览器,还有另一种方法
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        相关资源
        最近更新 更多