Home | 簡體中文 | 繁體中文 | 雜文 | Search | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 作品與服務 | Email

6.5. Node.js selenium-webdriver

6.5.1. 安裝測試環境

6.5.1.1. Selenium Server

下載 Selenium Serverhttp://selenium-release.storage.googleapis.com/2.40/selenium-server-standalone-2.40.0.jar

啟動 Selenium Server

java -jar selenium-server-standalone-2.40.0.jar
			
6.5.1.2. 安裝 selenium-webdriver

CentOS 6.5

# yum install nodejs npm 
# npm -g install selenium-webdriver
			

預設node_modules安裝在 /usr/lib/node_modules/selenium-webdriver

Ubuntu 13.04

sudo apt-get install nodejs
sudo apt-get install npm
sudo npm -g install selenium-webdriver
			

預設node_modules安裝在 /usr/local/lib/node_modules/selenium-webdriver

不是用-g參數npm install selenium-webdriver 將會安裝在當前目錄下

6.5.1.3. 瀏覽器相關設置

遠程控制Chrome參考

https://code.google.com/p/selenium/wiki/ChromeDriver下載後解壓運行裡面的執行檔

var driver = new webdriver.Builder().usingServer('http://192.168.6.20:9515/').withCapabilities(webdriver.Capabilities.chrome()).build();  
			

Firefox 使用

var driver = new webdriver.Builder().usingServer('http://192.168.6.20:4444/wd/hub').withCapabilities(webdriver.Capabilities.firefox()).build();  				
			

6.5.2. 測試例子

例 6.3. NODE.JS selenium-webdriver 本地測試

selenium-server-standalone 與 測試腳本在同一台機器上

			
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('webdriver');
driver.findElement(webdriver.By.name('btnK')).click();
driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title === 'webdriver - Google Search';
  });
}, 1000);

driver.quit();
			
			

例 6.4. NODE.JS selenium-webdriver 遠程測試

從一台測試機遙控另台selenium-server-standalone

			
var webdriver = require('/usr/local/lib/node_modules/selenium-webdriver');

var builder = new webdriver.Builder().  
  usingServer('http://192.168.6.20:4444/wd/hub').  
  withCapabilities(webdriver.Capabilities.firefox());  

var driver = builder.build();  

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnK')).click();
driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title === 'webdriver - Google Search';
  });
}, 1000);

driver.quit();
			
			

例 6.5. Unit Test

var assert = require('assert'),
    fs = require('fs');

var webdriver = require('..'),
    test = require('../testing'),
    remote = require('../remote');


test.describe('Google Search', function() {
  var driver;

  test.before(function() {
    driver = new webdriver.Builder().
        withCapabilities(webdriver.Capabilities.chrome()).
        build();
  });

  test.it('should append query to title', function() {
    driver.get('http://www.google.com');
    driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
    driver.findElement(webdriver.By.name('btnG')).click();
    driver.wait(function() {
      return driver.getTitle().then(function(title) {
        return 'webdriver - Google Search' === title;
      });
    }, 1000);
  });

  test.after(function() { driver.quit(); });
});
			

6.5.3. Unit Test

安裝 mocha

npm install -g mocha
		

測試腳本

var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');

test.describe('Google Search', function() {

	test.it('should work', function() {
		//var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
		var driver = new webdriver.Builder().usingServer('http://192.168.6.20:4444/wd/hub').withCapabilities(webdriver.Capabilities.firefox()).build();  
		driver.get('http://www.google.com');
		var searchBox = driver.findElement(webdriver.By.name('q'));
		searchBox.sendKeys('simple programmer');
		searchBox.getAttribute('value').then(function(value) {
			assert.equal(value, 'simple programmer');
		});
		driver.quit();
	});
});
		

運行測試程序

# mocha mocha.js 
  1 passing (10s)
		

測試成功返回1 passing (10s)

comments powered by Disqus