【问题标题】:Setting up Protractor to automatically open and close Selenium设置量角器以自动打开和关闭 Selenium
【发布时间】:2018-10-18 21:28:17
【问题描述】:

我正在尝试在我的一个 windows asp.net (mvc->angular) 项目上设置 E2E 测试。 我们使用团队城市进行构建,所以我希望我的配置在我的盒子和构建盒子上工作。

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

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

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

当我手动运行 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,所以我知道在构建/测试服务器上运行开始时它都是 kosher。

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

D:\TFS\TACAdmin3G_Test_E2E>调用 C:\Users\brown.ericw\AppData\Roaming\npm\protractor conf.js [启动器] 进程退出,错误代码为 1 C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\node_modules\q\ q.js:126 扔 e; ^ 错误:在 D:\TFS\TACAdmin3G\node_modules\protractor\selenium\chromedriver 找不到 chromedriver 在 LocalDriverProvider.addDefaultBinaryLocs_ (C:\Users\Brown.ericw\AppData\R oaming\npm\node_modules\protractor\lib\driverProviders\local.js:54:15) 在 LocalDriverProvider.setupEnv (C:\Users\Brown.ericw\AppData\Roaming\npm\no de_modules\protractor\lib\driverProviders\local.js:71:8) 在 Runner.run (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protrac tor\lib\runner.js:265:31) 在 TaskRunner.run (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\pro 拖拉机\lib\taskRunner.js:123:19) 在 createNextTaskRunner (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modul es\protractor\lib\launcher.js:220:20) 在 C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\lib\laun cher.js:243:7 在 _fulfilled (C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protrac tor\node_modules\q\q.js:797:54) 在 self.promiseDispatch.done (C:\Users\Brown.ericw\AppData\Roaming\npm\node_ 模块\量角器\node_modules\q\q.js:826:30) 在 Promise.promise.promiseDispatch (C:\Users\Brown.ericw\AppData\Roaming\npm \node_modules\protractor\node_modules\q\q.js:759:13) 在 C:\Users\Brown.ericw\AppData\Roaming\npm\node_modules\protractor\node_mod ules\q\q.js:573:44

由于路径中有空格,我尝试更改斜杠,然后它又变回了正常路径:

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?

没能弄明白

【问题讨论】:

  • 抱歉,复制了,但分心了,没有粘贴,现在可以了,谢谢!
  • 您是在本地服务器还是在构建服务器上收到此错误。记住 chrome 可能没有安装在团队城市服务器上
  • 在构建服务器上...我会检查 chrome。谢谢!我检查了 Chrome 是否安装在构建服务器上。

标签: selenium-webdriver protractor selenium-chromedriver


【解决方案1】:

好的,每个人,对于那些关注的人,这里是问题的答案以及为什么我认为这是有效的。此答案适用于我在 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 \ 作为路径中的斜杠..这是技巧,因为当我使用反斜杠时,它没有抱怨,唯一的区别是它在错误消息中用 ... 截断了路径,但是当我深入挖掘,反斜杠已从您输入的路径部分中删除......即使代码使用的部分基于 .\ 也有反斜杠......所以只能在 conf.js 的这些标签中的路径中使用正斜杠

3

使用 ../node_modules 与 .\node_modules 与 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"
    
  }
}

【讨论】:

    【解决方案2】:

    在构建服务器上运行真正的浏览器可能不是一个好的解决方案。如果您有一个专用的 Teamcity 节点,则可以选择像 PhantomJS 这样的无头浏览器实现。您需要确保 PhantomJS 安装在您的专用节点上,并且其可执行文件放置在 PATH 中的某个位置。还要确保将浏览器名称设置为 phantomjs 而不是 chrome。

    其次,您可以设置 Selenium 网格并使用要测试的不同浏览器设置节点。从构建服务器,您可以在您选择的浏览器上的远程 selenium 网格上运行测试。如果你想走这条路,有付费的第三方选项,如酱实验室或浏览器堆栈。

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

    【讨论】:

    • 感谢您的信息,由于一些“Phantom 失败/在浏览器上工作”问题,我打算避免使用 Phantom。我喜欢 stack 方法!
    猜你喜欢
    • 2017-09-10
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多