<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Introduction_to_WebDriver_part003</id>
	<title>Introduction to WebDriver part003 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Introduction_to_WebDriver_part003"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Introduction_to_WebDriver_part003&amp;action=history"/>
	<updated>2026-04-21T08:49:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Introduction_to_WebDriver_part003&amp;diff=22102&amp;oldid=prev</id>
		<title>David Parkin: /* Sometimes you just have to Wait⌘ */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Introduction_to_WebDriver_part003&amp;diff=22102&amp;oldid=prev"/>
		<updated>2014-09-11T17:27:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sometimes you just have to Wait⌘&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Selenium for victims of manual testing|030]]&lt;br /&gt;
[[Category:Private]]&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;false&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; &amp;gt;&lt;br /&gt;
;Title: Selenium with javascript&lt;br /&gt;
;Author: David Parkin&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction to Javascript⌘==&lt;br /&gt;
Javascript and Java are different, don&amp;#039;t get confused.&lt;br /&gt;
&lt;br /&gt;
variables - defined by var variable&lt;br /&gt;
&lt;br /&gt;
 var num = 12;&lt;br /&gt;
&lt;br /&gt;
use document.write, or doucment.element.innerHTML to display something.&lt;br /&gt;
&lt;br /&gt;
 document.write(num);&lt;br /&gt;
&lt;br /&gt;
==Introduction to Javascript - loops⌘==&lt;br /&gt;
&lt;br /&gt;
for,  while&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        a[i] = i;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Javascript - if⌘==&lt;br /&gt;
if&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(true){&lt;br /&gt;
do something&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Introduction to Javascript - functions⌘==&lt;br /&gt;
functions - first class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myfunc(){&lt;br /&gt;
do something&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
to call the function&lt;br /&gt;
&lt;br /&gt;
myfunc();&lt;br /&gt;
&lt;br /&gt;
types - dynamicaly typed&lt;br /&gt;
&lt;br /&gt;
==Selenium-webdriver JS⌘==&lt;br /&gt;
There are two popular bindings for Javascript (nodejs) – don&amp;#039;t get confused. &lt;br /&gt;
&lt;br /&gt;
We&amp;#039;ll be using the offical selenium bindings&lt;br /&gt;
&lt;br /&gt;
Writing scripts in JavaScript allows us to automate test runs, rather then having to manually run it from the IDE,&amp;lt;br /&amp;gt;&lt;br /&gt;
and also allows us to do more.&lt;br /&gt;
&lt;br /&gt;
Natively webdriverJS only supports chrome, we will be user selenium server.&lt;br /&gt;
&lt;br /&gt;
This allows us to run our tests on multiple browsers.&lt;br /&gt;
&lt;br /&gt;
We can also run our tests on multiple machines.&lt;br /&gt;
&lt;br /&gt;
webdriverJS is a completely asynchronous API.&lt;br /&gt;
&lt;br /&gt;
==Installing Selenium-webdriver JS⌘==&lt;br /&gt;
First we need to install node.js.&lt;br /&gt;
&lt;br /&gt;
for linux:&lt;br /&gt;
 sudo add-apt-repository ppa:chris-lea/node.js&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install nodejs&lt;br /&gt;
&lt;br /&gt;
For windows:&lt;br /&gt;
&lt;br /&gt;
Go to nodejs.org and download the latest version.&lt;br /&gt;
&lt;br /&gt;
Run the msi file and accept the default options.&lt;br /&gt;
&lt;br /&gt;
You may need to restart windows before npm will work.&lt;br /&gt;
&lt;br /&gt;
Press WindowsKey + R and type &amp;#039;cmd&amp;#039; + Enter.&lt;br /&gt;
&lt;br /&gt;
Type &amp;#039;npm install selenium-webdriver&amp;#039; + Enter.&lt;br /&gt;
&lt;br /&gt;
Install your favourite IDE/editor for Javascript, possibly netbeans.&lt;br /&gt;
&lt;br /&gt;
download chromedriver and move to a suitable location.&lt;br /&gt;
&lt;br /&gt;
Go to start, search for system variables and open &amp;gt; edit the system environment variables &amp;gt; click on enviroment variables.&lt;br /&gt;
&lt;br /&gt;
Make sure the PATH variable links to your chromedriver location.&lt;br /&gt;
&lt;br /&gt;
To add a path, put a ; at the end and then input the path to chromedriver. Dont remove the current paths.&lt;br /&gt;
&lt;br /&gt;
==Selenium-webdriver⌘==&lt;br /&gt;
we can use a module using nodejs require.&lt;br /&gt;
&lt;br /&gt;
to use webdriver&lt;br /&gt;
 =require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
we can assign this to a variable.&lt;br /&gt;
 var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
To execute our selenium commands we need to create a driver variable.&lt;br /&gt;
 var driver = new webdriver.Builder().Build();&lt;br /&gt;
&lt;br /&gt;
This will use default settings for browser.&lt;br /&gt;
&lt;br /&gt;
we can set other capabilities between Builder() and Build().&lt;br /&gt;
 var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
&lt;br /&gt;
The new keyword creates a new object instance of a class. We will talk about this more later.&lt;br /&gt;
&lt;br /&gt;
==Selenium-webdriver cont.⌘==&lt;br /&gt;
There are many useful methods we can use with our driver variable.&lt;br /&gt;
&lt;br /&gt;
Take a look at the api http://selenium.googlecode.com/git/docs/api/javascript/module_selenium-webdriver.html.&lt;br /&gt;
&lt;br /&gt;
to open a specific url&lt;br /&gt;
 driver.get(&amp;#039;url&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
to find an element(s)&lt;br /&gt;
 var element = driver.findElement(s)(locator);&lt;br /&gt;
&lt;br /&gt;
This represents a DOM element. Basically just a web element you can apply functions to.&lt;br /&gt;
&lt;br /&gt;
findElements returns an array of all elements that match your locator.&lt;br /&gt;
&lt;br /&gt;
We can apply different methods to our element&lt;br /&gt;
&lt;br /&gt;
click() - clicks&lt;br /&gt;
&lt;br /&gt;
sendKeys(&amp;#039;keys&amp;#039;) - sends keyboard input&lt;br /&gt;
&lt;br /&gt;
clear() - clears a textfield&lt;br /&gt;
&lt;br /&gt;
getText() - get text contained within the element&lt;br /&gt;
&lt;br /&gt;
getAttribute(att) - gets a specific attribute of that element&lt;br /&gt;
&lt;br /&gt;
submit() - submit a form&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example Code 2⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// simple test&lt;br /&gt;
&lt;br /&gt;
var assert = require(&amp;#039;assert&amp;#039;),&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
describe(&amp;#039;Google Search&amp;#039;, function() {&lt;br /&gt;
  &lt;br /&gt;
  this.timeout(60000);&lt;br /&gt;
  &lt;br /&gt;
  driver = new webdriver.Builder().&lt;br /&gt;
  usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  it(&amp;#039;should work&amp;#039;, function(done) {&lt;br /&gt;
    driver.get(&amp;#039;http://www.google.com&amp;#039;);&lt;br /&gt;
    var searchBox = driver.findElement(webdriver.By.name(&amp;#039;q&amp;#039;));&lt;br /&gt;
    searchBox.sendKeys(&amp;#039;webdriver&amp;#039;);&lt;br /&gt;
    searchBox.getAttribute(&amp;#039;value&amp;#039;).then(function(value) {&lt;br /&gt;
      assert.equal(value, &amp;#039;webdriver&amp;#039;);&lt;br /&gt;
       &lt;br /&gt;
    });&lt;br /&gt;
done();&lt;br /&gt;
  &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
 after(function(done) {&lt;br /&gt;
    driver.quit().then(function(){&lt;br /&gt;
        done();&lt;br /&gt;
    }); }); &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example Code 3⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// simple test&lt;br /&gt;
&lt;br /&gt;
var assert = require(&amp;#039;assert&amp;#039;),&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
describe(&amp;#039;Google Search&amp;#039;, function() {&lt;br /&gt;
  &lt;br /&gt;
  this.timeout(60000);&lt;br /&gt;
  &lt;br /&gt;
  driver = new webdriver.Builder().&lt;br /&gt;
  usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  it(&amp;#039;should work&amp;#039;, function(done) {&lt;br /&gt;
    driver.get(&amp;#039;http://www.google.com&amp;#039;);&lt;br /&gt;
    var searchBox = driver.findElement(webdriver.By.name(&amp;#039;q&amp;#039;));&lt;br /&gt;
    searchBox.sendKeys(&amp;#039;webdriver&amp;#039;);&lt;br /&gt;
    searchBox.getAttribute(&amp;#039;value&amp;#039;).then(function(value) {&lt;br /&gt;
      assert.equal(value, &amp;#039;webdriver&amp;#039;);&lt;br /&gt;
       done();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  driver.quit();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sometimes you just have to Wait⌘==&lt;br /&gt;
There are two kinds of waiting. Implicit and Explicit.&lt;br /&gt;
&lt;br /&gt;
An explicit wait will wait a certain amount of time before attempting something.&lt;br /&gt;
&lt;br /&gt;
An implicit wait will act as soon as possible.&lt;br /&gt;
&lt;br /&gt;
e.g. element.click() will act as soon as the element is visible,&lt;br /&gt;
&lt;br /&gt;
if implicit wait times out before its visible, the command will error.&lt;br /&gt;
&lt;br /&gt;
Implicit wait can be set by &lt;br /&gt;
driver.manage().timeouts().implicitlyWait(ms).&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s also a driver.sleep(ms) function.&lt;br /&gt;
&lt;br /&gt;
==Testing with mocha⌘==&lt;br /&gt;
&lt;br /&gt;
 run with mocha testname.js&lt;br /&gt;
&lt;br /&gt;
 install with npm install mocha -g&lt;br /&gt;
&lt;br /&gt;
describe this is a description you can apply to a group of test cases&lt;br /&gt;
&lt;br /&gt;
it - this is a particular test case&lt;br /&gt;
&lt;br /&gt;
assert - assert something is what you expect, i.e assert(title, &amp;quot;google&amp;quot;) &amp;lt;br /&amp;gt;&lt;br /&gt;
will cause the test to fail if the page titles is not google.&lt;br /&gt;
&lt;br /&gt;
after(), before() and aftereach(), beforeeach() are very useful functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use other assertion library&amp;#039;s with mocha, such as chai, however it is recommended to use the selenium-webdriver asserting library by &lt;br /&gt;
&lt;br /&gt;
requiring selenium-webdriver/testing/assert&lt;br /&gt;
&lt;br /&gt;
==Exercises1⌘==&lt;br /&gt;
Write a test using only webdriver to load up google homepage&lt;br /&gt;
&lt;br /&gt;
==Example1⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
&lt;br /&gt;
driver.get(&amp;#039;http://www.google.co.uk&amp;#039;);&lt;br /&gt;
driver.quit();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises2⌘==&lt;br /&gt;
write a test to open google and enter some text&lt;br /&gt;
&lt;br /&gt;
now add a submit&lt;br /&gt;
&lt;br /&gt;
then make sure the test closes&lt;br /&gt;
&lt;br /&gt;
==Example2⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
driver.manage().timeouts().implicitlyWait(10000);&lt;br /&gt;
driver.get(&amp;#039;https://www.google.co.uk&amp;#039;);&lt;br /&gt;
driver.findElement(webdriver.By.id(&amp;#039;gbqfq&amp;#039;)).sendKeys(&amp;#039;cheese&amp;#039;);&lt;br /&gt;
driver.findElement(webdriver.By.name(&amp;#039;btnG&amp;#039;)).click();&lt;br /&gt;
driver.findElement(webdriver.By.partialLinkText(&amp;quot;Wikipedia&amp;quot;)).click();&lt;br /&gt;
driver.quit();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises3⌘==&lt;br /&gt;
integrate mocha into the simple google test&lt;br /&gt;
&lt;br /&gt;
run test on standalone server&lt;br /&gt;
&lt;br /&gt;
run test with firefox&lt;br /&gt;
&lt;br /&gt;
run the test on both firefox and chrome&lt;br /&gt;
&lt;br /&gt;
assert title of google page&lt;br /&gt;
&lt;br /&gt;
==Example3⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;),&lt;br /&gt;
	test = require(&amp;#039;selenium-webdriver/testing&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
drive = webdriver.Capabilities.chrome();&lt;br /&gt;
testG(drive);&lt;br /&gt;
drive = webdriver.Capabilities.firefox();&lt;br /&gt;
testG(drive);&lt;br /&gt;
&lt;br /&gt;
function testG(drive){&lt;br /&gt;
test.describe(&amp;#039;test google search&amp;#039;, function()&lt;br /&gt;
{&lt;br /&gt;
	this._enableTimeouts = false;&lt;br /&gt;
		driver = new webdriver.Builder().usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(drive).build();&lt;br /&gt;
		driver.manage().timeouts().implicitlyWait(10000);&lt;br /&gt;
	&lt;br /&gt;
	test.it(&amp;#039;searching cheese&amp;#039;, function()&lt;br /&gt;
	{&lt;br /&gt;
		driver.get(&amp;#039;https://www.google.co.uk&amp;#039;);&lt;br /&gt;
		driver.findElement(webdriver.By.id(&amp;#039;gbqfq&amp;#039;)).sendKeys(&amp;#039;cheese&amp;#039;);&lt;br /&gt;
		driver.findElement(webdriver.By.name(&amp;#039;btnG&amp;#039;)).click();&lt;br /&gt;
&lt;br /&gt;
                driver.quit().then(function()	{&lt;br /&gt;
			done();&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
});}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises4⌘==&lt;br /&gt;
Using the wallet application, write a test that logs in and then logs out. &lt;br /&gt;
&lt;br /&gt;
==Example4⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// simple test&lt;br /&gt;
var Name = process.env.NAME;&lt;br /&gt;
var drivers = &amp;quot;chrome&amp;quot;;&lt;br /&gt;
var assert = require(&amp;#039;assert&amp;#039;),&lt;br /&gt;
    test =  webdriver = require(&amp;#039;selenium-webdriver/testing&amp;#039;)&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
&lt;br /&gt;
drive = webdriver.Capabilities.chrome();&lt;br /&gt;
testG(drive);&lt;br /&gt;
drive = webdriver.Capabilities.firefox();&lt;br /&gt;
testG(drive);&lt;br /&gt;
&lt;br /&gt;
function testG(drive){&lt;br /&gt;
test.describe(&amp;#039;test google search&amp;#039;, function()&lt;br /&gt;
{&lt;br /&gt;
    this._enableTimeouts = false;&lt;br /&gt;
    test.before(function()  {&lt;br /&gt;
        driver = new webdriver.Builder().usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(drive).build();&lt;br /&gt;
        driver.manage().timeouts().implicitlyWait(10000);&lt;br /&gt;
    });&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  test.it(&amp;#039;should Login&amp;#039;, function() {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;password\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 test.it(&amp;#039;should Logout&amp;#039;, function() {&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;log-out&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
test.after(function(done) {&lt;br /&gt;
    driver.quit();&lt;br /&gt;
}); &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises5⌘==&lt;br /&gt;
Now write another test that creates an account.&lt;br /&gt;
&lt;br /&gt;
==Example5⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// simple test&lt;br /&gt;
var Name = process.env.NAME;&lt;br /&gt;
var drivers = &amp;quot;chrome&amp;quot;;&lt;br /&gt;
var assert = require(&amp;#039;assert&amp;#039;),&lt;br /&gt;
    test =  webdriver = require(&amp;#039;selenium-webdriver/testing&amp;#039;)&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
&lt;br /&gt;
drive = webdriver.Capabilities.chrome();&lt;br /&gt;
testG(drive);&lt;br /&gt;
drive = webdriver.Capabilities.firefox();&lt;br /&gt;
testG(drive);&lt;br /&gt;
&lt;br /&gt;
function testG(drive){&lt;br /&gt;
test.describe(&amp;#039;test google search&amp;#039;, function()&lt;br /&gt;
{&lt;br /&gt;
    this._enableTimeouts = false;&lt;br /&gt;
    test.before(function()  {&lt;br /&gt;
        driver = new webdriver.Builder().usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(drive).build();&lt;br /&gt;
        driver.manage().timeouts().implicitlyWait(10000);&lt;br /&gt;
    });&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  test.it(&amp;#039;should Login&amp;#039;, function() {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;password\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
test.it(&amp;#039;should Create account&amp;#039;, function() {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;add-account&amp;#039;)).click();&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(Name);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
 test.it(&amp;#039;should Logout&amp;#039;, function() {&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;log-out&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
test.after(function() {&lt;br /&gt;
    driver.quit();&lt;br /&gt;
}); &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises6⌘==&lt;br /&gt;
Write a test that will delete an account.&lt;br /&gt;
&lt;br /&gt;
==Example6⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// simple test&lt;br /&gt;
var Name = process.env.NAME;&lt;br /&gt;
var drivers = &amp;quot;chrome&amp;quot;;&lt;br /&gt;
var assert = require(&amp;#039;assert&amp;#039;),&lt;br /&gt;
    test =  webdriver = require(&amp;#039;selenium-webdriver/testing&amp;#039;)&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
&lt;br /&gt;
drive = webdriver.Capabilities.chrome();&lt;br /&gt;
testG(drive);&lt;br /&gt;
drive = webdriver.Capabilities.firefox();&lt;br /&gt;
testG(drive);&lt;br /&gt;
&lt;br /&gt;
function testG(drive){&lt;br /&gt;
test.describe(&amp;#039;test google search&amp;#039;, function()&lt;br /&gt;
{&lt;br /&gt;
    this._enableTimeouts = false;&lt;br /&gt;
    test.before(function()  {&lt;br /&gt;
        driver = new webdriver.Builder().usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(drive).build();&lt;br /&gt;
        driver.manage().timeouts().implicitlyWait(10000);&lt;br /&gt;
    });&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  test.it(&amp;#039;should Login&amp;#039;, function() {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;password\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
it(&amp;#039;should Delete&amp;#039;, function() {&lt;br /&gt;
    driver.findElement(webdriver.By.xpath(&amp;#039;//span[contains(@id,\&amp;#039;details\&amp;#039;)]/a&amp;#039;)).click();&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;edit-account&amp;#039;)).click();&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;delete-account&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
 test.it(&amp;#039;should Logout&amp;#039;, function() {&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;log-out&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
test.after(function() {&lt;br /&gt;
    driver.quit();&lt;br /&gt;
}); &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercises8⌘==&lt;br /&gt;
Run your test on multiple browsers.&lt;br /&gt;
&lt;br /&gt;
Verify if an account exists before logging out.&lt;br /&gt;
&lt;br /&gt;
How can we deal with creating an account with a name that already exists and then deleting it.&lt;br /&gt;
&lt;br /&gt;
==Example8⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// simple test&lt;br /&gt;
var Name = process.env.NAME;&lt;br /&gt;
var drivers = &amp;quot;chrome&amp;quot;;&lt;br /&gt;
var assert = require(&amp;#039;selenium-webdriver/testing/assert&amp;#039;),&lt;br /&gt;
    webdriver = require(&amp;#039;selenium-webdriver&amp;#039;),&lt;br /&gt;
    test = require(&amp;#039;selenium-webdriver/testing&amp;#039;);&lt;br /&gt;
var driver;&lt;br /&gt;
var fs = require(&amp;#039;fs&amp;#039;);&lt;br /&gt;
for (i=0; i&amp;lt;1; i++)   {&lt;br /&gt;
test.describe(&amp;#039;Google Search&amp;#039;, function() {&lt;br /&gt;
 &lt;br /&gt;
  this.timeout(10000);&lt;br /&gt;
 &lt;br /&gt;
  test.before(function() {&lt;br /&gt;
        if (drivers === &amp;quot;chrome&amp;quot;)  {&lt;br /&gt;
        driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
driver.manage().timeouts().implicitlyWait(10000);}&lt;br /&gt;
        else{&lt;br /&gt;
        driver = new webdriver.Builder().&lt;br /&gt;
    usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(webdriver.Capabilities.firefox()).build();&lt;br /&gt;
driver.manage().timeouts().implicitlyWait(10000);}&lt;br /&gt;
 &lt;br /&gt;
    });&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  test.it(&amp;#039;should Login&amp;#039;, function() {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;password\&amp;#039;]&amp;#039;)).sendKeys(&amp;quot;test&amp;quot;);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
test.it(&amp;#039;should Create account&amp;#039;, function(done) {&lt;br /&gt;
    driver.get(&amp;#039;http://localhost/wallet/index.php&amp;#039;);&lt;br /&gt;
    driver.findElement(webdriver.By.id(&amp;#039;add-account&amp;#039;)).click();&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(Name);&lt;br /&gt;
    driver.findElement(webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
    var named = driver.findElement(webdriver.By.css(&amp;quot;span[id^=&amp;#039;account&amp;#039;&amp;quot;));&lt;br /&gt;
    //var title = named.getText();&lt;br /&gt;
   var name = named.getText();&lt;br /&gt;
        assert(name).equalTo(&amp;#039;Account: david&amp;#039;);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    driver.takeScreenshot().then(function(data) {&lt;br /&gt;
  writeScreenshot(data, &amp;#039;out1.png&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
           &lt;br /&gt;
     });&lt;br /&gt;
 &lt;br /&gt;
 function writeScreenshot(data, name) {&lt;br /&gt;
  name = name || &amp;#039;ss.png&amp;#039;;&lt;br /&gt;
  var screenshotPath = &amp;#039;/home/ubuntu/Desktop/&amp;#039;;&lt;br /&gt;
//ubuntu path /home/ubuntu/Desktop/&lt;br /&gt;
 &lt;br /&gt;
  fs.writeFileSync(screenshotPath + name, data, &amp;#039;base64&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
test.after(function() {&lt;br /&gt;
    drivers = &amp;quot;firefox&amp;quot;;&lt;br /&gt;
    driver.quit();&lt;br /&gt;
}); &lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exercise9⌘==&lt;br /&gt;
Write a test using ActionSequences.&lt;br /&gt;
&lt;br /&gt;
Go to hover menu and click on an item.&lt;br /&gt;
&lt;br /&gt;
==Example9⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
driver.manage().timeouts().implicitlyWait(5000);&lt;br /&gt;
driver.get(&amp;#039;http://54.75.220.18&amp;#039;);&lt;br /&gt;
var element1 = driver.findElement(webdriver.By.css(&amp;#039;#om-leaf-om-u1-1981824389-1&amp;gt;a&amp;#039;));&lt;br /&gt;
Actions = new webdriver.ActionSequence(driver).&lt;br /&gt;
        mouseMove(element1).perform();&lt;br /&gt;
&lt;br /&gt;
var element2 = driver.findElement(webdriver.By.linkText(&amp;#039;General Item 1&amp;#039;));&lt;br /&gt;
Actions = new webdriver.ActionSequence(driver).&lt;br /&gt;
        click(element2).perform();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
driver.quit();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Multiple browsers⌘==&lt;br /&gt;
we can only run chrome natively remember, we need to install selenium standalone server.&lt;br /&gt;
&lt;br /&gt;
We just need to set capabilities to different browser.&lt;br /&gt;
&lt;br /&gt;
IE is annoying and needs you to do some stuff before you can use it. (please don&amp;#039;t have IE 11)&lt;br /&gt;
&lt;br /&gt;
https://code.google.com/p/selenium/wiki/InternetExplorerDriver&lt;br /&gt;
&lt;br /&gt;
Don&amp;#039;t forget to downloads chromedriver.&lt;br /&gt;
&lt;br /&gt;
==Other capabilities⌘==&lt;br /&gt;
other options for setting capabilites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 new webdriver.Builder().&lt;br /&gt;
	usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).&lt;br /&gt;
   withCapabilities(webdriver.Capabilities.chrome()).&lt;br /&gt;
   build(); &lt;br /&gt;
&lt;br /&gt;
new webdriver.Builder().&lt;br /&gt;
	usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).&lt;br /&gt;
   withCapabilities(webdriver.Capabilities.firefox()).&lt;br /&gt;
   build(); &lt;br /&gt;
&lt;br /&gt;
new webdriver.Builder().&lt;br /&gt;
	usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).&lt;br /&gt;
   withCapabilities(webdriver.Capabilities.ie()).&lt;br /&gt;
   build(); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Page Object Model⌘==&lt;br /&gt;
The Page Object Model is a widely used design pattern for selenium.&lt;br /&gt;
&lt;br /&gt;
When you have a large suite of tests, code can become repetitive.&lt;br /&gt;
&lt;br /&gt;
The page object model makes it easier to maintain scripts, and to create new ones.&lt;br /&gt;
&lt;br /&gt;
Here is an example. (hopefully)&lt;br /&gt;
&lt;br /&gt;
https://github.com/jamesottaway/js-page-object&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;javascript&amp;#039;&amp;gt;&lt;br /&gt;
function PageObject(testdriver, url)	{&lt;br /&gt;
	this.Assert = require(&amp;#039;assert&amp;#039;);&lt;br /&gt;
	this.base_url = url;&lt;br /&gt;
	this.driver = testdriver;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PageObject.prototype.url = function(inputURL) {&lt;br /&gt;
		driver.get(inputURL);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
PageObject.prototype.find = function(locator) {&lt;br /&gt;
	driver.findElement(locator);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function GoogPage(testdriver, url, input)	{&lt;br /&gt;
	PageObject.call(this, testdriver, url);&lt;br /&gt;
	this.input = input;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GoogPage.prototype = Object.create(PageObject.prototype);&lt;br /&gt;
GoogPage.prototype.constructer = GoogPage;&lt;br /&gt;
&lt;br /&gt;
GoogPage.prototype.search = function(page, keys)	{&lt;br /&gt;
	driver.findElement(webdriver.By.name(&amp;#039;q&amp;#039;)).sendKeys(keys);&lt;br /&gt;
	driver.findElement(webdriver.By.name(&amp;#039;go&amp;#039;)).click();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
 driver = new webdriver.Builder().&lt;br /&gt;
    usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
&lt;br /&gt;
var page = new GoogPage(driver, &amp;quot;http://www.bing.com&amp;quot;, &amp;quot;cheese&amp;quot;);&lt;br /&gt;
page.url(&amp;quot;http://www.bing.com&amp;quot;);&lt;br /&gt;
page.search(&amp;quot;cheese&amp;quot;);&lt;br /&gt;
driver.quit();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Page Object Model Login⌘==&lt;br /&gt;
&amp;lt;source lang=&amp;#039;javascript&amp;#039;&amp;gt;&lt;br /&gt;
function PageObject( url)	{&lt;br /&gt;
         this.webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
	this.Assert = require(&amp;#039;assert&amp;#039;);&lt;br /&gt;
	this.base_url = url;&lt;br /&gt;
	this.driver = this.driversb(this.webdriver);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PageObject.prototype.driversb = function(webdriver)	{&lt;br /&gt;
	return driver = new webdriver.Builder().&lt;br /&gt;
    usingServer(&amp;quot;http://127.0.0.1:4444/wd/hub&amp;quot;).withCapabilities(webdriver.Capabilities.chrome()).build();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PageObject.prototype.url = function(inputURL) {&lt;br /&gt;
	inputURL = inputURL || this.base_url;&lt;br /&gt;
		driver.get(inputURL);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
PageObject.prototype.find = function(locator) {&lt;br /&gt;
	return driver.findElement(locator);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Login( url)	{&lt;br /&gt;
	PageObject.call(this, url);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Login.prototype = Object.create(PageObject.prototype);&lt;br /&gt;
Login.prototype.constructer = Login;&lt;br /&gt;
&lt;br /&gt;
Login.prototype.user = function(username){&lt;br /&gt;
	driver.findElement(this.webdriver.By.css(&amp;#039;input[type=\&amp;#039;text\&amp;#039;]&amp;#039;)).sendKeys(username);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Login.prototype.pass = function(pass){&lt;br /&gt;
	&lt;br /&gt;
    driver.findElement(this.webdriver.By.css(&amp;#039;input[type=\&amp;#039;password\&amp;#039;]&amp;#039;)).sendKeys(pass);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Login.prototype.submit = function(){&lt;br /&gt;
	driver.findElement(this.webdriver.By.css(&amp;#039;input[type=\&amp;#039;submit\&amp;#039;]&amp;#039;)).click();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GoogPage( url)	{&lt;br /&gt;
	Login.call(this, url);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GoogPage.prototype = Object.create(Login.prototype);&lt;br /&gt;
GoogPage.prototype.constructer = GoogPage;&lt;br /&gt;
&lt;br /&gt;
GoogPage.prototype.search = function(keys)	{&lt;br /&gt;
	this.find(this.webdriver.By.name(&amp;#039;q&amp;#039;)).sendKeys(keys);&lt;br /&gt;
	driver.findElement(this.webdriver.By.name(&amp;#039;go&amp;#039;)).click();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module.exports.GoogPage = GoogPage;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;javascript&amp;#039;&amp;gt;&lt;br /&gt;
var PageObject = require(&amp;#039;./log.js&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
var webdriver = require(&amp;#039;selenium-webdriver&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
var page = new PageObject.GoogPage(&amp;quot;http://localhost/wallet/index.php&amp;quot;, &amp;quot;cheese&amp;quot;);&lt;br /&gt;
page.url();&lt;br /&gt;
page.user(&amp;quot;demo&amp;quot;);&lt;br /&gt;
page.pass(&amp;quot;demo&amp;quot;);&lt;br /&gt;
page.submit();&lt;br /&gt;
driver.quit();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>David Parkin</name></author>
	</entry>
</feed>