Selenium webdriver 设置量角器以自动打开和关闭Selenium

Selenium webdriver 设置量角器以自动打开和关闭Selenium,selenium-webdriver,protractor,selenium-chromedriver,Selenium Webdriver,Protractor,Selenium Chromedriver,我正在尝试在我的一个windows asp.net(mvc->angular)项目上设置E2E测试。 我们使用TeamCity进行构建,因此我希望我的配置能够在我的框和构建框上工作 我一直在尝试在conf.js中设置值,以便在量角器需要时自动启动和停止量角器 我通过以下批处理文件运行它: call npm install -g call C:\Users\brown.ericw\AppData\Roaming\npm\protractor conf.js pause 当我手动运行sel

我正在尝试在我的一个windows asp.net(mvc->angular)项目上设置E2E测试。 我们使用TeamCity进行构建,因此我希望我的配置能够在我的框和构建框上工作

我一直在尝试在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安装,所以我知道在构建/测试服务器上开始运行时,它是干净的

这是我得到的错误。。很明显,我无法找到使其指向chrome驱动程序的设置

D:\TFS\TACAdmin3G\U Test\U E2E>呼叫 C:\Users\brown.ericw\AppData\Roaming\npm\protra-ctor-conf.js [launcher]进程已退出,错误代码为1 C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\dragrator\node\u modules\q\ q、 js:126 投掷e; ^错误:在D:\TFS\TACAdmin3G\node\u modules\dragrator\selenium\chromedriver处找不到chromedriver 在LocalDriverProvider.addDefaultBinaryLocs(C:\Users\Brown.ericw\AppData\R oaming\npm\node\u modules\dragrator\lib\driverProviders\local.js:54:15) 在LocalDriverProvider.setupEnv(C:\Users\Brown.ericw\AppData\Roaming\npm\no de_modules\dragrator\lib\driverProviders\local.js:71:8) 在Runner.run(C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\protrac tor\lib\runner.js:265:31) 在TaskRunner.run(C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\pro 拖拉机\lib\taskRunner.js:123:19) 在createNextTaskRunner(C:\Users\Brown.ericw\AppData\Roaming\npm\node\u模块 es\dragrator\lib\launcher.js:220:20) 位于C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\dragrator\lib\laun cher.js:243:7 完成时(C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\protrac) tor\node\u modules\q\q.js:797:54) 在self.promiseDispatch.done(C:\Users\Brown.ericw\AppData\Roaming\npm\node_ 模块\量角器\节点\u模块\q\q.js:826:30) 在Promise.Promise.promiseDispatch(C:\Users\Brown.ericw\AppData\Roaming\npm \节点\模块\量角器\节点\模块\q\q.js:759:13) 位于C:\Users\Brown.ericw\AppData\Roaming\npm\node\u modules\dragrator\node\u mod ules\q\q.js:573:44

我尝试更改斜线,因为上面的路径中有空间,它变回了正常路径:

Error: Could not find chromedriver at D:\TFS\TACAdmin3G\_Test_E2E\..
这并没有给我全部的路

chromedriver.exe位于conf.js中各种注释版本的所有位置。但他们每个人都不快乐

我需要使用相对路径,因为我的框上的根文件夹与生成服务器上的根文件夹不同

非常感谢您的帮助

忘了说我看过这个: 这个呢


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

其次,您可以设置Selenium网格,并使用要测试的不同浏览器设置节点。从build server,您可以在所选浏览器上的远程selenium网格上运行测试。如果你想走这条路,有付费的第三方选择,如sauce labs或browser stack


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

好的,每个人,对于关注的人,下面是问题的答案,以及我认为这是可行的原因。这个答案适用于VS中的node.js项目(也必须在这里添加包)、我的开发设备盒上的批处理文件以及team city

我将NPM安装添加到构建脚本中,这样一旦代码被删除,它就会立即将所有js包放在代码目录中

然后,我将selenium server stand lone包添加到我的项目中(和package.json),这样我就知道jar的确切位置。我将其添加为--Save(write to config)和--Dev(添加到Dev部分,即包含在我代码文件夹中的node_模型中)

然后我在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\作为路径中的斜杠..这是一个技巧,因为当我使用反斜杠时,它没有抱怨,唯一的区别是它在错误消息中用…截断了路径,但当我深入挖掘时,反斜杠会从您输入的路径部分删除…甚至代码所基于的部分。\n也有反斜杠…所以只有在conf.js中这些标记的路径中使用前斜杠

3. 与../node_模块vs.\node_模块vs node_模块的相对路径…,使用了所有这些模块的示例,一旦我能够看到生成的完整路径,我就发现../不是我想要的..所以我玩了它,让它与一个一起工作。/还有一个什么都没有。/我不知道为什么它们都不工作。/我不知道…但它是有效的。(对此表示抱歉)

为了以防万一,这里是my package.jso
{
  "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"
    
  }
}