我如何使用node.js控制浏览器(ala Selenium)?

我听说过苏打水 ,但它似乎需要你注册,而且分钟数有限(免费/ 200分钟)。

有谁知道是否有一些替代方法来控制浏览器,或者更具体地调用网页上的JS?

https://github.com/LearnBoost/soda/raw/master/examples/google.js

/** * Module dependencies. */ var soda = require('../') , assert = require('assert'); var browser = soda.createClient({ host: 'localhost' , port: 4444 , url: 'http://www.google.com' , browser: 'firefox' }); browser.on('command', function(cmd, args){ console.log(' \x1b[33m%s\x1b[0m: %s', cmd, args.join(', ')); }); browser .chain .session() .open('/') .type('q', 'Hello World') .clickAndWait('btnG') .getTitle(function(title){ assert.ok(~title.indexOf('Hello World'), 'Title did not include the query'); }) .clickAndWait('link=Advanced search') .waitForPageToLoad(2000) .assertText('css=#gen-query', 'Hello World') .assertAttribute('as_q@value', 'Hello World') .testComplete() .end(function(err){ if (err) throw err; console.log('done'); }); 

Zombie.js可能会为你工作。 它是无头的,看起来很酷。

实际上现在有用于JavaScript的Selenium绑定,可以与Node.js一起使用。

以下是一些开始的基本步骤:

  1. 1安装Node.js,你可以在这里find下载。
  2. 确保你有最新的Chrome驱动程序,并把它放在你的path。
  3. 使用npm install selenium-webdriver将模块添加到您的项目中。
  4. 写一个testing,例如:

var webdriver = require('selenium-webdriver');

  var driver = new webdriver.Builder()。
    withCapabilities(webdriver.Capabilities.chrome())。
   build立();

 driver.get( 'http://www.google.com');
 driver.findElement(webdriver.By.name('q'))。sendKeys('simple programmer');
 。driver.findElement(webdriver.By.name( 'btnG'))点击();
 driver.quit(); </代码>

我介绍了如何在一些截图中做到这一点,以及如何在我的博客文章中使用Mocha作为testing驱动程序。

下面是一个关于selenium的webdriver的java API的纯node.js包装:

https://npmjs.org/package/webdriver-sync

这是一个例子:

 var webdriverModule = require("webdriver-sync"); var driver = new webdriverModule.ChromeDriver; var By = webdriverModule.By; var element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); element = driver.findElement(By.name("q")); assert.equal(element.getAttribute('value'), "Cheese!"); 

将其保存在.js文件中并使用节点运行。

该模块是一个纯粹的包装,所以像睡眠或同步调用是完全可能的。 这里是模块的当前界面:

 module.exports={ ChromeDriver:ChromeDriver, FirefoxDriver:FirefoxDriver, HtmlUnitDriver:HtmlUnitDriver, By:new By(), ExpectedConditions:new ExpectedConditions(), WebDriverWait:WebDriverWait, Credentials:UserAndPassword, Cookie:Cookie, TimeUnits:TimeUnits, /** * @param {number} amount in mills to sleep for. */ sleep:function(amount){ java.callStaticMethodSync( "java.lang.Thread", "sleep", new Long(amount) ); } }; 

您可以在这里看到一个testing全部function的集成testing:

https://github.com/jsdevel/webdriver-sync/blob/master/test/integrations/SmokeIT.js

wd是“一个用于webdriver / selenium 2的node.js javascript客户端”