使用单个Gulp任务管理Protractor测试

时间:2015-06-01 21:48:43

标签: angularjs protractor

我正在尝试使用Gulp在我的角度项目中进行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 jar

这些说明需要protractor node_modules ./node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jarnode_modules/protractor/)中 selenium-server-standalone jar 的路径,但selenium }目录没有这样的jar(或者static int f(int[] a, int inf, int sup) { if(sup == inf) return a[inf]; if(sup == inf+1) return a[inf] + a[sup]; else { int thrd = (sup - inf + 1)/3; int i = inf + thrd; int j = i + thrd; int sum = 0; for(int k = i; k < j; k++) sum += a[k]; return f(a, inf, i-1) + f(a, j, sup) + sum; } } 子目录)

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

有没有办法让这个设置好,以便单个gulp任务启动独立服务器,运行测试,并关闭它而不需要其他干预?

2 个答案:

答案 0 :(得分:10)

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

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

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

    将下载Selenium。然后将配置指向正确的jar。

答案 1 :(得分:6)

让本地工作的最简单方法是使用本地Selenium Standalone jar,就像Igor在选项#2中建议的那样。 (生成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'
    }]
};