我可以/如何将来自node.js的Selenium webdriver测试脚本翻译成phantomjs - ghostdriver?

时间:2014-02-27 19:17:53

标签: javascript node.js selenium-webdriver phantomjs ghostdriver

我最近开始使用Selenium并让生活更容易开始我使用节点来运行我的脚本,以便我可以直观地监控测试。我现在的挑战是转换它,以便它可以作为无头测试运行。不幸的是,我遇到的大部分资源只能使用带有Java或Python的phantomjs和ghostdriver。我的老板希望我在没有Java或Python的情况下通过phantomjs运行测试。最终,这些测试将通过没有GUI的服务器上的Linux VM远程运行。目前我正在使用Mac OS X 10.8进行测试,并且仍然有许多桥梁可以跨越以实现我的目标。

首先,我最重要的问题是,是否可以通过端口从phantomjs运行脚本而无需使用Java或Python?我花了几个小时研究尽可能多的资源,但我没有解决方案。

如果是这样,我怎样才能正确初始化测试以运行无头?以下是我编写功能测试开始的脚本。我想正确地将功能从firefox切换到phantomjs,并能够使用适当的端口无头地运行它。测试的其余部分导航到特定站点,通过窗口小部件登录,然后进一步导航到我将构建进一步测试的区域,以便在我开始工作后进行操作。

var webdriver = require('selenium-webdriver'),
SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;

var server = new SeleniumServer("Path/selenium-server-standalone-2.39.0.jar", {
port: 8910
});

server.start();

var driver = new webdriver.Builder().
usingServer(server.address()).
withCapabilities(webdriver.Capabilities.firefox()).
build();

测试工作完美,但我是新手,所以我可能会忽略一些愚蠢的东西。请让我知道要进行哪些调整,以便通过幻像运行无头。当我在将功能切换到phantomjs后尝试使用node来运行脚本时,它会生成

"/Selenium/node_modules/selenium-webdriver/phantomjs.js:22
LogLevel = webdriver.logging.LevelName,
                            ^
TypeError: Cannot read property 'LevelName' of undefined
 at Object.<anonymous> (/Selenium/node_modules/selenium-webdriver/phantomjs.js:22:33)

这是一个我无法调整的只读文件,我将“LogLevel”或“LevelName”定义为相应的相应值(DEBUG等)所做的任何尝试都没有结果。

如果我通过phantomjs运行它,我得到 -

"Error: Cannot find module 'path'

 phantomjs://bootstrap.js:289
 phantomjs://bootstrap.js:254 in require"

(It also lists module 'http') -- (and various undefined function errors)

我觉得在那个实例中我没有正确组织Selenium,phantomjs和ghostdriver的文件应该去哪里才能玩得很好。我还删除了服务器设置部分,而是首先运行它,然后单独运行脚本。

phantomjs --webdriver=8910 

但它产生了同样的结果。我解决这些问题的所有研究都发现了Java和Python的指令,而不是Javascript本身。而不是追逐许多兔子洞,我认为咨询更好的思想是明智的。

如果你比我知道的更好,并且没有Java或Python尝试这种方法毫无结果,请告诉我。如果你知道我的脚本中的问题在哪里并且可以提出修复,请告诉我。我希望我已正确描述了我的问题的性质,如果您需要更多信息,我会尽力为您提供。

这是我用Javascript工作的第二周,所以如果你认为我正在制作一个noob错误,你很可能是正确的。请记住,脚本通过节点使用selenium webdriver。

非常感谢您的时间! 〜艾萨克

1 个答案:

答案 0 :(得分:2)

这有点棘手,但这是我拼凑的解决方案:

var webdriver = require('selenium-webdriver'),
    SeleniumServer = require('selenium-webdriver/remote').SeleniumServer,
    server = new SeleniumServer('/path/to/selenium/selenium-server-standalone-2.41.0.jar', {
        port: 4444

    }),
    capabilities = webdriver.Capabilities.phantomjs();
    capabilities.set('phantomjs.binary.path', 'path/to/phantom/bin/phantomjs');

var promise = server.start().then(function() {
    var client = new webdriver.Builder().
    usingServer(server.address()).withCapabilities(
       capabilities
    ).build();
    return {
        'client': client,
        'server': server
    };
}, function(err) {
    console.log('error starting server', err);
});

然后,您可以使用与selenium的mocha兼容测试框架的promise来保存测试,直到服务器启动。

一旦我发现导航位于页面的最右侧,我发现文档确实非常有用。这是网址:http://selenium.googlecode.com/git/docs/api/javascript/module_selenium-webdriver.html 然后你会被困在我的位置。让selenium-webdriver安静下来。