WebDriverIO with Selenium: Tutorial to Run Your First Test on LambdaTest
In this topic, you will learn how to automate your website testing using Selenium with WebDriverIO Automation on LambdaTest Selenium cloud platform.
Objective
By the end of this topic, you will be able to:
- Run a sample Selenium Webdriver test using JavaScript on LambdaTest Automation.
- Comprehend and configure Selenium test suite with respect to your capabilities.
- Select the specific browsers to run your test on.
- Explore the advanced features of LambdaTest.
- Run your test cases in parallel to reduce build times.
Prerequisites For Running WebDriverIO Selenium Tests
Before getting started with Automated Scripts using WebDriverIO Selenium on LambdaTest Automation, you need to:
- The first step is to download and install node.js and node package manager or npm. You should be having nodejs v6 or newer. Download it from official NodeJS website.
- Make sure to use the latest version of JavaScript.
- Download Selenium JavaScript bindings from the official Selenium website.
- Once you download the JavaScript bindings, extract the ZIP file which you’ve downloaded. After extracting the file, you need to add Selenium Java bindings which is a JAR file and all the dependent libraries to your classpath.
Installing Selenium Dependencies and Tutorial Repo
Step 1: Clone our repo to see the sample test case to run the first test on Lambdatest.
git clone https://github.com/LambdaTest/webdriverio-selenium.git
Step 2: Install all the required dependcies for the project.
npm i webdriverio
npm i selenium-webdriver
cd webdriverio-selenium
npm i
Run Your First Test
Step 3: Go to you project file and open tests/specs/single_test.js
to see the test case.
//single_test.js
var assert = require('assert');
describe('Lambdatest Demo Test', function() {
it('Lambdatest Demo TestCase', function () {
browser
.url('https://lambdatest.github.io/sample-todo-app/')
.click('*[name="li1"]')
.click('*[name="li2"]')
.setValue('*[id="sampletodotext"]','Lambdatest\n');
assert(browser.getTitle().match(/Sample page - lambdatest.com/i));
});
});
Configuration of Your Test Capabilities
You can use LambdaTest Capabilities Generator tool to select and pass those browser environment specifications.
Step 4: Go to your conf/single.conf.js
file where you can set your test capabilites.
//single.conf.js
user= process.env.LT_USERNAME || "<your username>",
key= process.env.LT_ACCESS_KEY || "<your accessKey>",
exports.config = {
updateJob: false,
user,
key,
specs: [
'./tests/specs/single_test.js'
],
exclude: [],
capabilities: [{
browserName: 'chrome',
version:"64.0",
name:"Test webdriverio",
build:"build 1",
}],
sync: true,
logLevel: 'info',
coloredLogs: true,
screenshotPath: './errorShots/',
baseUrl: '',
waitforTimeout: 100000,
connectionRetryTimeout: 90000,
connectionRetryCount: 1,
path: '/wd/hub',
hostname: 'hub.lambdatest.com',
port: 80,
beforeSession: function (config, capabilities, specs) {
capabilities.name=specs[0].split(/(\\|\/)/g).pop() || undefined;
},
after: function (result, capabilities, specs) {
driver.execute("lambda-status=".concat(result==0?"passed":"failed"),undefined);
},
framework: 'mocha',
mochaOpts: {
ui: 'bdd'
}
}
Sample Test
Step 5: Now you can explore the sample test case to be run on the cloud using WD
framework in scripts/lambdatest.js
:
// lambdatest.js
var chai = require("chai"),
chaiAsPromised = require("chai-as-promised"),
wd = require('wd'),
colors = require('colors'),
child_process = require('child_process')
chai.use(chaiAsPromised);
chai.should();
chaiAsPromised.transferPromiseness = wd.transferPromiseness;
wd.addPromiseChainMethod(
'onQuit', function (done) {
if (done) done();
return this;
}
);
function runOnlambdatest(caps, test, done) {
console.log("Starting Test: " + test.name.green + '\n');
var browser = wd.promiseChainRemote(config.seleniumHost, config.seleniumPort, username, accessKey);
// optional extra logging
browser.on('status', function (info) {
console.log(info.cyan);
});
browser.on('command', function (eventType, command, response) {
console.log(' > ' + eventType.green, command, (response || '').grey);
});
browser.on('http', function (meth, path, data) {
console.log(' > ' + meth.yellow, path, (data || '').grey);
});
test.run(browser.init(caps)).fin(function () { return browser.quit(); }).onQuit(done).done();
}
var config_file = process.argv[2] || 'conf.js'
var config = require(config_file).config;
var test = require(config.test);
var username = process.env.LT_USERNAME || config.user;
var accessKey = process.env.LT_ACCESS_KEY || config.key;
for (var i in config.capabilities) {
var caps = config.capabilities[i];
if (caps["tunnel"]) {
//start tunnel
}
else {
runOnlambdatest(caps, test);
}
}
Step 6: Now you can create or update your package.json
file.
//package.json
{
"name": "webdriverio-Lambdatest",
"version": "0.1.0",
"readme": "WendriverIO Integration with [Lambdatest](https://www.Lambdatest.com)",
"description": "Selenium examples for WebdriverIO and Lambdatest Automate",
"scripts": {
"test": "npm run single && npm run local && npm run parallel",
"single": "./node_modules/.bin/wdio conf/single.conf.js",
"parallel": "./node_modules/.bin/wdio conf/parallel.conf.js",
"local": "./node_modules/.bin/wdio conf/local.conf.js",
"multiple": "./node_modules/.bin/wdio conf/multiple.conf.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Lambdatest/webdriverio-Lambdatest.git"
},
"keywords": [
"webdriverio",
"Lambdatest",
"selenium",
"tests"
],
"bugs": {},
"homepage": "https://github.com/Lambdatest/webdriverio-Lambdatest#readme",
"dependencies": {
"webdriverio": "^4.14.2"
},
"devDependencies": {
"wdio-mocha-framework": "^0.6.4"
}
}
Run Your First Test
Step 7: You can run the following command below to execute your test.
npm run single
Incase of Parallel Testing
You can go to conf/parallel.conf.js
file in the repo to configure your parallel test cases:
exports.config = {
user: process.env.LT_USERNAME || 'YOUR LAMBDATEST USERNAME',
key: process.env.LT_ACCESS_KEY || 'YOUR LAMBDATEST ACCESS KEY',
updateJob: false,
specs: [
'./tests/specs/single_test.js'
],
exclude: [],
maxInstances: 10,
commonCapabilities: {
name: 'webdriverIO-parallel_test',
build: 'webdriverIO-lambdatest',
visual:false,
video:true,
console:false,
network:false
},
capabilities: [{
browserName: 'chrome',
version: '65.0',
platform: 'WIN10'
},{
browser: 'firefox',
version: '64.0',
platform: 'WIN7',
},{
browser: 'internet explorer'
version: '10.0',
platform: 'WIN10',
},{
browser: 'MicrosoftEdge'
version: '18.0',
platform: 'WIN10',
}],
logLevel: 'verbose',
coloredLogs: true,
screenshotPath: './errorShots/',
baseUrl: '',
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
host: 'hub.lambdatest.com',
port:'80',
framework: 'mocha',
mochaOpts: {
ui: 'bdd'
}
}
// Code to support common capabilities
exports.config.capabilities.forEach(function(caps){
for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
});
After you configure your tests you can run the following command to execute the tests:
npm run parallel