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

时间:2015-06-22 18:46:35

标签: selenium-webdriver protractor selenium-chromedriver

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

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

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

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

当我手动运行硒时,一切正常。

但我无法找出正确的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。

这是我得到的错误..很明显我无法弄清楚设置让它指向镀铬驱动程序......

  

d:\ TFS \ TACAdmin3G_Test_E2E>呼叫   C:\ Users \ brown.ericw \ AppData \ Roaming \ npm \ protra ctor conf.js   [launcher]进程已退出,错误代码为1   C:\ Users \用户Brown.ericw \应用程序数据\漫游\ NPM \ node_modules \量角器\ node_modules \ q \   q.js:126                       扔掉;                             ^错误:在D:\ TFS \ TACAdmin3G \ node_modules \ protractor \ selenium \ chromedriver找不到chromedriver       在LocalDriverProvider.addDefaultBinaryLocs_(C:\ Users \ Brown.ericw \ AppData \ R   oaming \ NPM \ node_modules \量角器\ lib中\ driverProviders \ local.js:54:15)       在LocalDriverProvider.setupEnv(C:\ Users \ Brown.ericw \ AppData \ Roaming \ npm \ no   de_modules \量角器\ 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 \量角器\ 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)       at 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 \量角器\ 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?

并且无法弄清楚

2 个答案:

答案 0 :(得分:2)

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

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

然后我将selenium server stand lone包添加到我的项目(和package.json,所以我确切知道jar的位置。我将它添加为--Save(写入配置)和--Dev(添加)在dev部分,即包含在我的代码文件夹中的node_models中)

然后我在conf.js中有这个

select * from formsresponse fr, formsresponses frs
where fr.formsresponse_id = frs.formsresponse_id 
and fr.form_submitdate >= '20150313' and fr.form_submitdate < '20150401'

有一些微妙但重要的变化。

1

seleniumServerJar vs seleniumjar - 有很多使用seleniumjar的例子...所以我猜测标准标签在某些时候发生了变化,但seleniumServerJar是文档页面上显示的内容,它起作用了。

2

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

3

使用../node_modules vs。\ node_modules vs node_modules ...的相对路径,有一些示例,其中使用了所有这些,一旦我能够看到生成的完整路径,我发现../ wasn这就是我想要的......所以我玩它并让它与一个./和一个没有...为什么他们都没有合作./我不知道..但它的确有效。(对不起)那)

以防万一,这是我的package.json

> 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 :(得分:1)

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

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

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