Install Docker
Enable Virtualization from Bios Setup
run VM from Oracle Box
Run Docker terminal
type --> docker info
Go to https://github.com/SeleniumHQ/docker-selenium
Pull all the images
docker pull selenium/hub
docker pull selenium/node-chrome
docker pull selenium/node-firefox
docker images
docker logs hub
To See all containers
docker ps -a
Concept is we will have Hub Container and Nodes Container
So earlier biggest disadvantage of Using Grid earlier was we have to ask for extra infrastructure to Setup the VMs, but now we don't need those Extra Setup, with Docker Containers we can setup everything on or local machine on top of our Host OS
Now run all the images (after running these , they will become container)
docker run -d --name selenium -p 5900:5900 -p 4444:4444 selenium/standalone-chrome-debug
Note:
5900 is VNC Port
we tell 5900:5900 which means map our internal port 5900 to 5900 of VNC viewer
The below command we will use to setup Selenium Hub as Docker Container
docker run -d -p 5000:4444 --name selenium-hub -P selenium/hub
The below command we will use to setup Selenium Nodes as Docker Container
docker run -d --link selenium-hub:hub -P --name chrome selenium/node-chrome(Here we are starting node container and we are using link attribute to link it to the Hub container)
docker run -d --link selenium-hub:hub -P --name firefox selenium/node-firefox
Increase machines by following commands
docker run -d --link selenium-hub:hub selenium/node-firefox
docker run -d --link selenium-hub:hub selenium/node-chrome
Important commands
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL
dev * virtualbox Running tcp://192.168.99.104:2376
$ docker-machine stop dev
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL
dev * virtualbox Stopped
We need to run Grid on Docker Machine IP
SO to find Ip of machine
docker-machine ip
here we have mapped port as 5000
http://192.168.99.100:5000/grid/console
To Stop and Remove all containers
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Run Selenium tests in Docker
Make sure you have two firefox instances up
Example:
docker run -d --link selenium-hub:hub -P --name firefox selenium/node-firefox
docker run -d --link selenium-hub:hub selenium/node-firefox
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
We will be dividing test in two classes using testng.xml
First Class
package com.quikr.gridExample;
/** * Created by NEERAJ on 4/23/2017. */import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class GridExampleTest {
public RemoteWebDriver driver;
public static String appURL = "http://www.google.com";
@BeforeClass public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
// Here we are using URL of Docker where our Grid Console is present "http://192.168.99.100:5000/wd/hub"
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
driver.manage().window().maximize();
}
@Test public void testGooglePageTitleInIEBrowser() {
System.out.println("*** Navigation to Application ***");
driver.navigate().to(appURL);
String strPageTitle = driver.getTitle();
System.out.println("*** Verifying page title ***");
Assert.assertTrue(strPageTitle.equalsIgnoreCase("Google"), "Page title doesn't match");
}
@AfterClass public void closeBrowser() {
if (driver != null) {
driver.quit();
}
}
}
Second class
package com.quikr.gridExample;
/** * Created by NEERAJ on 4/23/2017. */
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
public class GridExampleTest1 {
public RemoteWebDriver driver;
public static String appURL = "http://www.facebook.com";
@BeforeClass public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
driver.manage().window().maximize();
}
@Test public void testGooglePageTitleInIEBrowser() {
System.out.println("*** One ***");
driver.navigate().to(appURL);
String strPageTitle = driver.getTitle();
System.out.println("*** One Verifying page title ***");
Assert.assertTrue(strPageTitle.equalsIgnoreCase("Facebook"), "Page title doesn't match");
}
@AfterClass public void closeBrowser() {
if (driver != null) {
driver.quit();
}
}
}
Use this TestNg.xml file
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Main Test Suite" verbose="1" annotations="JDK" parallel="classes" thread-count="2">
<test name="TestNG Grid">
<packages>
<package name="com.quikr.gridExample.*">
</package>
</packages>
</test>
</suite>
Enable Virtualization from Bios Setup
run VM from Oracle Box
Run Docker terminal
type --> docker info
Go to https://github.com/SeleniumHQ/docker-selenium
Pull all the images
docker pull selenium/hub
docker pull selenium/node-chrome
docker pull selenium/node-firefox
docker images
docker logs hub
To See all containers
docker ps -a
Concept is we will have Hub Container and Nodes Container
Now run all the images (after running these , they will become container)
Note:
5900 is VNC Port
we tell 5900:5900 which means map our internal port 5900 to 5900 of VNC viewer
The below command we will use to setup Selenium Hub as Docker Container
docker run -d -p 5000:4444 --name selenium-hub -P selenium/hub
The below command we will use to setup Selenium Nodes as Docker Container
docker run -d --link selenium-hub:hub -P --name chrome selenium/node-chrome(Here we are starting node container and we are using link attribute to link it to the Hub container)
docker run -d --link selenium-hub:hub -P --name firefox selenium/node-firefox
Increase machines by following commands
docker run -d --link selenium-hub:hub selenium/node-firefox
docker run -d --link selenium-hub:hub selenium/node-chrome
Important commands
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL
dev * virtualbox Running tcp://192.168.99.104:2376
$ docker-machine stop dev
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL
dev * virtualbox Stopped
We need to run Grid on Docker Machine IP
SO to find Ip of machine
docker-machine ip
here we have mapped port as 5000
http://192.168.99.100:5000/grid/console
To Stop and Remove all containers
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Run Selenium tests in Docker
Make sure you have two firefox instances up
Example:
docker run -d --link selenium-hub:hub -P --name firefox selenium/node-firefox
docker run -d --link selenium-hub:hub selenium/node-firefox
// Here we are using URL of Docker where our Grid Console is present "http://192.168.99.100:5000/wd/hub"
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
We will be dividing test in two classes using testng.xml
First Class
package com.quikr.gridExample;
/** * Created by NEERAJ on 4/23/2017. */import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class GridExampleTest {
public RemoteWebDriver driver;
public static String appURL = "http://www.google.com";
@BeforeClass public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
// Here we are using URL of Docker where our Grid Console is present "http://192.168.99.100:5000/wd/hub"
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
driver.manage().window().maximize();
}
@Test public void testGooglePageTitleInIEBrowser() {
System.out.println("*** Navigation to Application ***");
driver.navigate().to(appURL);
String strPageTitle = driver.getTitle();
System.out.println("*** Verifying page title ***");
Assert.assertTrue(strPageTitle.equalsIgnoreCase("Google"), "Page title doesn't match");
}
@AfterClass public void closeBrowser() {
if (driver != null) {
driver.quit();
}
}
}
Second class
package com.quikr.gridExample;
/** * Created by NEERAJ on 4/23/2017. */
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
public class GridExampleTest1 {
public RemoteWebDriver driver;
public static String appURL = "http://www.facebook.com";
@BeforeClass public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
driver = new RemoteWebDriver(new URL("http://192.168.99.100:5000/wd/hub"), capabilities);
driver.manage().window().maximize();
}
@Test public void testGooglePageTitleInIEBrowser() {
System.out.println("*** One ***");
driver.navigate().to(appURL);
String strPageTitle = driver.getTitle();
System.out.println("*** One Verifying page title ***");
Assert.assertTrue(strPageTitle.equalsIgnoreCase("Facebook"), "Page title doesn't match");
}
@AfterClass public void closeBrowser() {
if (driver != null) {
driver.quit();
}
}
}
Use this TestNg.xml file
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Main Test Suite" verbose="1" annotations="JDK" parallel="classes" thread-count="2">
<test name="TestNG Grid">
<packages>
<package name="com.quikr.gridExample.*">
</package>
</packages>
</test>
</suite>
No comments:
Post a Comment