【问题标题】:Manage Protractor tests with a single Gulp task使用单个 Gulp 任务管理量角器测试
【发布时间】:2015-06-01 21:48:42
【问题描述】:

我正在尝试使用 Gulp 对我的 Angular 项目进行 e2e 测试。

我能够让它工作,但前提是我在单独的终端窗口中使用 webdriver-manager start 手动启动独立的 selenium 服务器。

理想情况下,我希望我的 gulp 任务能够管理启动和停止服务器,以免增加我的团队运行这些测试的开销。

我按照这里的说明进行了设置:

https://github.com/mllrsohn/gulp-protractor

他们描述了启动 selenium 服务器的 2 个选项。一种是设置一个 gulp 任务,它似乎与webdriver-manager start 做同样的事情:

gulp.task('webdriver_standalone', require("gulp-protractor").webdriver_standalone);

这个工作,但是当我让我的 e2eTest 任务将它作为依赖项调用时就不行了。我必须在单独的终端窗口中运行gulp webdriver_standalone。

我无法理解其他建议的选项。

指向量角器配置文件中的硒罐

这些说明需要 selenium-server-standalone jar 的路径,在 protractors node_modules (./node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar),但我的 node_modules/protractor/ 目录没有这样的 jar (或selenium 子目录)

Running Protractor without a plugin 的说明似乎有同样的问题,必须在另一个终端窗口中运行 selenium 服务器。

有没有办法进行此设置,以便单个 gulp 任务启动独立服务器、运行测试并在没有其他干预的情况下将其关闭?

【问题讨论】:

    标签: angularjs protractor


    【解决方案1】:

    当您运行 Protractor 时,您有几个关于 Selenium WebDriver 的选项(请记住,WebDriver 是用 Java 编写的网络服务):

    1. 使用带远程(独立)服务的 Protractor 运行。它可以是本地的,也可以在不同的机器上。如果 Selenium 在不同的机器上,那么您的 Web 应用程序应该是公开可用的,而不仅仅是 localhost。如果您选择使用独立的 Selenium 服务,那么您可以使用 seleniumAddress 选项配置您的配置文件/Gulp 任务。
    2. “要求”量角器为您运行 Selenium。在这种情况下,Protractor 将使用您在 seleniumServerJar 配置中提供的 Jar 文件运行 Selenium WebDriver。
    3. 不要使用 Selenium WD。请改用直接连接,它仅与 Chrome 和(可能)Firefox 兼容。

    在您的情况下,只需运行:

    ./node_modules/protractor/bin/webdriver-manager update
    

    它将下载 Selenium。然后将 config 指向正确的 jar。

    【讨论】:

    • 我认为我的问题是我无法找到.jar 文件。完全不知道问这个问题后发生了什么变化,但我通过在服务器运行时运行ps -ef 弄清楚了。瞧,这正是我最初的问题说我找不到的地方:./node_modules/protractor/selenium/
    • 也谢谢你提到direct connect,我没听说过。
    • 我计划在我们的 CI 管道中使用远程 Selenium 服务器,但对于本地开发,我想让 Protractor 为我做这件事。你同意这听起来是最好的选择吗>
    • 我也在考虑做同样的事情,但还没有找到好的解决方案!
    【解决方案2】:

    正如 Igor 在选项 #2 中建议的那样,在本地工作的最简单方法是使用本地 Selenium Standalone jar。 (让 gulp 将 webdriver-manager start 作为衍生的 child_process 或异步任务运行是非常困难的。) 您可以使用以下方法轻松地在 node_modules 文件夹中获取该 jar:

    npm install selenium-server-standalone-jar --save-dev

    然后,在您的 protractor.conf.js 中注释掉或删除 seleniumAddress 行并为 seleniumServerJar 添加一行。

    exports.config = {
        seleniumServerJar: '../node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.47.1.jar',
        //seleniumAddress: 'http://localhost:4444/wd/hub',
        /* Lines below for completeness only, leave yours as is. */
        framework: 'jasmine2',
        specs: ['login-spec.js'],
        multiCapabilities: [{
            browserName: 'chrome',
            browserName: 'firefox'
        }]
    };
    

    【讨论】:

    • 默认情况下,Protractor 现在向 node_modules/protractor/selenium/... 查找 Selenium 服务器。如果 Protractor 是通过 npm 在本地安装的,则 Selenium 已经存在,因此无需单独安装 selenium-server-standalone-jar。根据the docs,seleniumServerJar: 将默认为node_modules/protractor/selenium/...,除非配置了另一种启动 Selenium 的方法。这意味着每次更新 Selenium 服务器时都不需要更新seleniumServerJar:。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2017-02-14
    • 2021-02-12
    相关资源
    最近更新 更多