我可以/我怎么能将一个Selenium webdrivertesting脚本从node.js转换为phantomjs – ghostdriver?

我最近开始和Selenium一起工作,为了让生活更轻松,我开始使用节点来运行我的脚本,以便可以直观地监视testing。 我现在面临的挑战是将其转换为可以作为无头testing运行。 不幸的是,我所遇到的大部分资源只能用Java或Python使用phantomjsghostdriver。 我的老板要我通过没有Java或Python的phantomjs来运行testing。 最终,这些testing将通过不带GUI的服务器上的Linux VM远程运行。 目前,我正在使用Mac OS X 10.8进行testing,并且仍然有很多桥接以便达到我的目标。

我最重要的问题是,是否可以通过端口从phantomjs运行脚本而不使用Java或Python? 我花了好几个小时的时间仔细研究了我所能得到的资源,而且我没有find解决办法。

如果是这样,我该如何正确地初始化testing运行无头? 这是我如何编写我的functiontesting的开始。 我想正确地将function从firefox切换到phantomjs,并且能够使用合适的端口来运行它。 其余的testing导航到一个特定的网站,通过一个小部件login,然后进一步导航到该地区,我将build立进一步的testing,在我得到这个工作后操纵。

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(); 

testing工作完美,但我是新来的,所以我可以忽略一些愚蠢的东西。 请让我知道做了什么调整,以便通过幻影无法运行。 当我尝试使用节点运行脚本后切换functionphantomjs它产生的

 "/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错误,你很可能是正确的。 请记住,该脚本通过与seleniumwebdriver节点工作。

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

这有点棘手,但这是我拼凑在一起的解决scheme:

 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的testing框架中使用promise来保存testing,直到服务器启动。

一旦我发现导航位于页面的最右侧,我发现文档确实很有帮助。 这是url: http : //selenium.googlecode.com/git/docs/api/javascript/module_selenium-webdriver.html那么你会卡在我的地方。 让seleniumwebdriver安静下来。