我如何使用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安装Node.js,你可以在这里find下载。
- 确保你有最新的Chrome驱动程序,并把它放在你的path。
- 使用
npm install selenium-webdriver
将模块添加到您的项目中。 - 写一个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客户端”