【问题标题】:Running protractor when webdriver-manager start finisheswebdriver-manager 启动完成时运行量角器
【发布时间】:2016-07-04 03:55:52
【问题描述】:

我在编写用于启动量角器测试的 npm 脚本时遇到问题。 遵循文档https://github.com/angular/protractor/blob/master/docs/server-setup.md 似乎首先我必须运行

webdriver-manager start

在我开始实际测试时让它运行

./node_modules/.bin/protractor test/integration/conf.js

我希望这两个步骤在一个 npm 脚本中执行,所以我最终会得到这样的结果:

"scripts": {
    "protractor-update": "./node_modules/.bin/webdriver-manager update",
    "protractor-start": "./node_modules/.bin/webdriver-manager start",
    "protractor-init": "npm run protractor-update && npm run protractor-start",
    "test-protractor": "npm run protractor-start && ./node_modules/.bin/protractor test/integration/conf.js",
},

现在显然问题是./node_modules/.bin/webdriver-manager start 没有返回退出代码,因此它永远不会执行下一个命令。

实现这一目标的正确方法是什么?

【问题讨论】:

    标签: angularjs node.js selenium protractor


    【解决方案1】:

    答案在于 shell 脚本基础知识。

    使用 & 将 webdriver 置于后台

    例如

    webdriver-manager start &
    

    这将运行 webdriver-manager,然后立即将控制权返回给 shell,允许您输入后续命令。

    在通过某种机制(例如kill %1pkill webdriver-manager)完成测试后,您将需要终止 webdriver-manager。否则你最终会有几十个未使用的 webdriver 进程在运行......

    【讨论】:

    • 您假设 selenium 服务器将在 & 将控制权返回给 shell 并运行下一个命令时启动。如果没有,测试会失败,对吧?
    • 谈到“shell 脚本基础”,我建议您通过 PID 终止进程,而不是从作业列表中选择第一个作业。您可以使用foo & FOO_PID=$! 保存最近发送到后台的进程的 PID
    【解决方案2】:

    我和你有同样的问题。这是我在 StackOverflow 上浏览后在同事的帮助下找到的解决方案。

    在 package.json 中:

    "scripts": {
      "e2e": "bash run-e2e-tests.sh"
    }
    

    bash 文件:

    # Start selenium server and trash the verbose error messages from webdriver
    webdriver-manager start 2>/dev/null &
    # Wait 3 seconds for port 4444 to be listening connections
    while ! nc -z 127.0.0.1 4444; do sleep 3; done
    #  run protractor
    protractor test/e2e/conf.js
    

    【讨论】:

      【解决方案3】:

      您可以同时使用来解决您的问题。

      使用以下命令同时安装

      npm install concurrently --save
      

      然后在你的 package.json 中使用如下:

      "e2e:all-steps": "concurrently -k -s first \"./node_modules/.bin/webdriver-manager update\" \"./node_modules/.bin/webdriver-manager start\" \"npm run protractor-update && npm run protractor-start\" \"npm run protractor-start && ./node_modules/.bin/protractor test/integration/conf.js\""
      

      希望对您有所帮助。 :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多