设置 Protractor 自动打开和关闭 Selenium

Setting up Protractor to automatically open and close Selenium

我正尝试在我的 windows asp.net (mvc->angular) 项目之一上设置 E2E 测试。 我们使用 team city 进行构建,因此我希望我的配置能够在我的盒子和构建盒上运行。

我一直在尝试设置 conf.js 中的值,以便量角器在需要时自动启动和停止...

我 运行 通过这样的批处理文件:

 call npm install -g
 call C:\Users\brown.ericw\AppData\Roaming\npm\protractor conf.js
 pause 

当我手动 运行ning selenium 时一切正常。

但我只是想不出正确的 conf.js 让 selenium 自动启动和关闭(尽管有几种不同的方法,但在 bat 文件中停止它并不总是有效)。

我尝试了很多不同的组合,但我很难过。

这是我的 conf.js:

的相关部分
exports.config = {
    seleniumjar: '.\node_modules\protractor\selenium\selenium-server-standalone-2.45.0.jar',

    //seleniumArgs: '-Dwebdriver.chrome.driver="\node_modules\protractor\selenium\chromedriver',
    //chromeDriver: '.\node_modules\protractor\selenium\chromedriver',
    //chromeDriver: '.\node_modules\protractor\bin\webdriver-manager',
    chromeDriver: 'C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\selenium\chromedriver',
    //seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: [
        'e2eTests/*.js'
    ],

我在我的项目文件夹下安装了量角器,所以我 运行 npm install,所以我知道在 build/test 服务器上 运行 的开头都是 kosher。

这是我遇到的错误。很明显,我无法弄清楚如何让它指向 chrome 驱动程序...

D:\TFS\TACAdmin3G_Test_E2E>call C:\Users\brown.ericw\AppData\Roaming\npm\protra ctor conf.js [launcher] Process exited with error code 1 C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\node_modules\q\ q.js:126 throw e; ^ Error: Could not find chromedriver at D:\TFS\TACAdmin3G\node_modules\protractor\ selenium\chromedriver at LocalDriverProvider.addDefaultBinaryLocs_ (C:\Users\Brown.ericw\AppData\R oaming\npm\node_modules\protractor\lib\driverProviders\local.js:54:15) at LocalDriverProvider.setupEnv (C:\Users\Brown.ericw\AppData\Roaming\npm\no de_modules\protractor\lib\driverProviders\local.js:71:8) at Runner.run (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protrac tor\lib\runner.js:265:31) at TaskRunner.run (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\pro tractor\lib\taskRunner.js:123:19) at createNextTaskRunner (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modul es\protractor\lib\launcher.js:220:20) at C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\lib\laun cher.js:243:7 at _fulfilled (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protrac tor\node_modules\q\q.js:797:54) at self.promiseDispatch.done (C:\Users\Brown.ericw\AppData\Roaming\npm\node_ modules\protractor\node_modules\q\q.js:826:30) at Promise.promise.promiseDispatch (C:\Users\Brown.ericw\AppData\Roaming\npm \node_modules\protractor\node_modules\q\q.js:759:13) at C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\node_mod ules\q\q.js:573:44

我尝试更改斜杠,因为那里的路径中有 space,但它又变回了正常路径:

Error: Could not find chromedriver at D:\TFS\TACAdmin3G\_Test_E2E\..

这并没有给我完整的路径。

chromedriver.exe在conf.js中各种注释版本的所有位置。但是对他们每个人都不满意。

我需要使用相对路径,因为我机器上的根文件夹与构建服务器上的不同。

非常感谢任何帮助。

忘了说我看过这个:Protractor does not find chromedriver: The driver executable does not exist: 还有这个

how to close selenium webdriver at end of test?

无法弄明白

运行 构建服务器上的真实浏览器可能不是一个好的解决方案。如果您有一个专用的 Teamcity 节点,那么像 PhantomJS could be an option. You need to make sure that PhantomJS 这样的无头浏览器实现将安装在您的专用节点上,并且其可执行文件位于 PATH 中的某个位置。还要确保将浏览器名称设置为 phantomjs 而不是 chrome.

其次,您可以使用要测试的不同浏览器设置 Selenium 网格和设置节点。从构建服务器,您将 运行 在您选择的浏览器上的远程 selenium 网格上进行测试。如果你想走那条路,有付费的第三方选项,比如 sauce labs 或 browser stack。

我倾向于选择第二个选项,因为 PhantomJS 不是真正的浏览器,您可能需要在不同的 browsers/platforms 等平台上测试您的应用程序

好的,对于那些关注的人,这里是问题的答案以及为什么我认为这是有效的。这个答案适用于我在 VS 中的 node.js 项目(也必须在此处添加包),在我的开发箱上的批处理文件中,以及在团队城市中。

我将 NPM INSTALL 添加到我的构建脚本中,这样一旦代码被拉下,它就会立即将所有 js 包放入代码目录中。

然后我将 selenium 服务器独立包添加到我的项目中(和 package.json 所以我确切地知道 jar 在哪里。我将它添加为 --Save(写入配置)和 - -Dev(添加到开发部分,即包含在我的代码文件夹中的node_models)

然后我的 conf.js

里有这个
> exports.config = {
>     seleniumServerJar: 'node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.45.0.jar',
>     chromeDriver: './node_modules/protractor/selenium/chromedriver',
>     //seleniumAddress: 'http://localhost:4444/wd/hub',

有几个细微但重要的变化。

1

seleniumServerJar 与 seleniumjar - 有很多使用 seleniumjar 的示例...所以我猜标准标记在某些时候发生了变化,但是 seleniumServerJar 是文档页面上显示的,它是有效的。

2

/ vs \ 作为路径中的斜杠.. 这是技巧,因为当我使用反斜杠时,它没有抱怨,唯一的区别是它在错误消息中用 ... 截断了路径,但是当我深入挖掘时,反斜杠将从您输入的路径部分中删除......甚至代码使用的部分基于 .\ 有反斜杠......所以只在 [= 中的这些标签的路径中使用正斜杠38=]

3

相对路径../node_modules vs .\node_modules vs node_modules...,一旦我能够看到正在生成的完整路径我发现 ../ 不是我想要的..所以我玩了它并让它与一个 ./ 一起工作,一个什么都没有......为什么他们都没有与 ./ 一起工作我不知道..但它有效。(对此感到抱歉)

我的 package.json

以防万一
{
  "name": "_Test_e2e",
  "version": "0.0.0",
  "description": "_Test_e2e",
  "main": "app.js",
  "author": {
    "name": "Brown.EricW",
    "email": ""
  },
  "devDependencies": {
    "jasmine-reporters": "^1.0.0",
    "protractor": ">=0.14.0-0 <1.0.0",
    "selenium-server-standalone-jar": "^2.45.0"
  },
  "scripts": {
    "postinstall": "webdriver-manager update"
  },
  "dependencies": {
    "jasmine": "^2.3.1",
    "jasmine-reporters": "^1.0.0",
    "protractor": "^2.1.0"
    
  }
}