Selenium Introduction
l Selenium
supports language like HTML, Java, PHP, purl, Python, Ruby and C# .
l Selenium
supports multiple web browsers like, IE, Firefox, Chrome, Opera
l Selenium
supports multiple Operating systems like Windows, Linux, Mac
l Selenium
Components
Selenium IDE
l Firefox extension
l Easy record and replay
l Debug and set breakpoints
l Save tests in HTML, WebDriver
and other
formats.
l Selenium
saves all information
in an HTML table
format
l Each
record consists of:
Command – tells Selenium what to do (e.g. “open”,
“type”, “click”, “verifyText”)
Target – tells Selenium which HTML element a command
refers to (e.g. textbox, header, table)
Value – used for any command that might need a value
of some kind (e.g. type something into a textbox)
Selenium IDE Commands and Assertion
Command
|
Number of Parameters
|
Description
|
open
|
0 - 2
|
Opens a page using a URL.
|
click/clickAndWait
|
1
|
Clicks on a specified element.
|
type/typeKeys
|
2
|
Types a sequence of characters.
|
verifyTitle/assertTitle
|
1
|
Compares the actual page title with an expected value.
|
verifyTextPresent
|
1
|
Checks if a certain text is found within the page.
|
verifyElementPresent
|
1
|
Checks the presence of a certain element.
|
verifyTable
|
2
|
Compares the contents of a table with expected values.
|
waitForPageToLoad
|
1
|
Pauses execution until the page is loaded completely.
|
waitForElementPresent
|
1
|
Pauses execution until the specified element becomes
present.
|
Selenium IDE Assertion
There are 3 Types of Assertions
l Assert.
When an "assert" command fails, the test is stopped immediately.
l Verify.
When a "verify" command fails, Selenium IDE logs this failure and
continues with the test execution.
l WaitFor.
Before proceeding to the next command, "waitFor" commands will first
wait for a certain condition to become true
Selenium Webdriver
l It
is an API that’s easy to explore and understand, which help us to make our
tests easier to read and maintain
l Supports
dynamic web pages where element of a Page may change without the Page itself
being reloaded
l Web
Driver is a compact Object Oriented API which can directly interacts with the
Application under tests.
l WebDriver
utilizes the browser native compatibility to automation without using any peripheral
entity.
l Selenium-WebDriver
supports multiple browsers in multiple platforms
–
Google Chrome 12.0.712.0+
–
Internet Explorer 6+
–
Firefox 3.0+
–
Opera 11.5+
–
Android – 2.3+ for phones and tablets
–
iOS 3+ for phones
–
iOS 3.2+ for tablets
Selenium WebDriver 3.0 Architecture Diagram
Instantiating Selenium WebDriver object in Java\C#
Firefox Browser
Chrome Browser
IWebDriver driver = new ChromeDriver(@"C:\Path for chrome exe\");
Internet Browser
IWebDriver driver = new InternetExplorerDriver(@"C:\Path for IE exe\");
Not the Selenium executable for above drivers are available
in seleniumhq website mentioned in next slide. Download the executable and
unzip it.
Downloading Browser executable
Download browse's executable from below link for Firefox,
Chrome, IE:
WebDriver methods to –
Launching
a Page e.g. driver.Url = "http://www.google.co.in";
• Locating UI Elements (WebElements)
–
FindElement(By arg)
–
FineElements(By arg)
–
Both methods of WebDriver object are passing
By object as parameter
–
FindElement return single WebElement
and FindElements return list of WebElement
–
Example
WebDriver driver = new FirefoxDriver();
WebElement field = driver.FindElement(By.Id(“abc”));
List<WebElement> fields =
driver.FindElements(By.TagName(“abc”));
How to locate an element using By class
By Id
HTML:
<div id="coolestWidgetEvah">...</div>
WebDriver:
driver.FindElement(
By.Id("coolestWidgetEvah") );
By Name
HTML: <input name="cheese"
type="text"/>
WebDriver:
driver.FindElement( By.Name("cheese") );
By.LinkText finds a link element by the exact text it
displays
driver.FindElement(By.LinkText("REGISTRATION"))
By.ClassName finds elements based on the value of the
"class" attribute
driver.FindElement(By.ClassName("someClassName"))
By.TagName locates elements by their tag name
driver.FindElement(By.TagName("div"))
By.PartialLinkText locates elements that contain the
given link text
driver.FindElement(By.PartialLinkText("REG"))
By Xpath
HTML
<html>
<input
type="text" name="example" />
<input
type="text" name="other" />
</html>
WebDriver:
driver.FindElements(
By.Xpath("//input") );
There
are plug-ins for firefox/chrome to automatically display the Xpath
Syntax
for Xpath : Xpath=//tagname[@attribute='value']
By.CssSelector finds elements based on the driver's
underlying CSS Selector engine
driver.FindElement(By.CssSelector("input#email"))
Sample Application
Selenium-WebDriver
Test Script
•
Example:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
namespace SeleniumTesting
{
[TestFixture]
class SeleniumIE
{
IWebDriver driver;
[SetUp]
public void
StartBrowser()
{
driver = new
InternetExplorerDriver(@"C:\Users\Hunza\SeleniumCsharp\SeleniumAutomation\");
}
[Test]
public void Test()
{
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(25);
driver.Url =
"http://www.google.co.in";
IWebElement
field= driver.FindElement(By.Id("lst-ib"));
field.Clear();
field.SendKeys("Seleniumhq");
IWebElement
fieldButton = driver.FindElement(By.Name("btnK"));
fieldButton.Click();
}
[TearDown]
public void
CloseBrowser()
{
driver.Close();
}
}
}
|
Selenium-WebDriver methods
– control browser
l Close()
- close the browser window which the driver has focused
Syntax:
driver.Close();
l Quit()
- close all the browser windows open by driver.
Syntax:
driver.Quit();
l Url()
retrun type String
Syntax:
String strurl = driver.Url();
l Title()
retrun type String
Syntax:
String strTitle =driver.Title();
l CurrentWindowHandle() return the web browser driver's reference ID
Syntax:
String
strDriverReference = driver.CurrentWindowHandle();
l WindowHandles() return the reference ID of all the browser's
window open by the driver.
Syntax:
List<String>
strDriverReference = driver.WindowHandles();
l Manage():
There below supporting methos used by the driver
l driver.Manage().Cookies.AddCookie()
l driver.Manage().Window.Maximize();
l driver.Manage().Timeouts().PageLoad
= TimeSpan.FromSeconds(25);
l driver.Manage().Window.FullScreen();
l Point
point= driver.Manage().Window.Position;
• Navigate()
is instance variable of Navigation interface
–
driver.Navigate().Back();
–
driver.Navigate().Forward();
–
driver.Navigate().GoToUrl("");
SwitchTo() is instance variable of TargetLocator
interface
–
driver.SwitchTo().Window("windowRefrence");
–
driver.SwitchTo().Alert().Accept();
–
driver.SwitchTo().Alert().Dismiss();
–
driver.SwitchTo().Alert().SendKeys("values");
–
driver.SwitchTo().Frame(i);
–
driver.SwitchTo().Frame(“frameName”);
–
driver.SwitchTo().ParentFrame();
l Text
() - to read html tag value.
driver.FindElement(By.Id("disp")).Text();
l SendKeys
(String values) - input value in text box
driver.FindElement(By.id("inp1")).SendKeys("50000");
l Click()
- click a button or webElement
driver.FindElement(By.TagName("button")).Click()
l GetAttribut(String
attributname) – get the html tag's attribute value
driver.FindElement(By.TagName("button")).GetAttribute("class")
l TagName()
- get the html tag name (input/button/select)
driver.FindElement(By.Id("inp1")).TagName()
l Displayed()/
Enabled()/ Selected() - verify the displayed/enabled/selected status of html
tags
Example One (Loan Calculator)
using
System;
using
NUnit.Framework;
using
OpenQA.Selenium;
using
OpenQA.Selenium.Chrome;
using
OpenQA.Selenium.Support.UI;
namespace
SeleniumTesting
{
[TestFixture]
class SeleniumTestOne
{
IWebDriver driver;
[SetUp]
public void StartBrowser()
{
driver = new
ChromeDriver(@"C:\Users\Hunza\SeleniumCsharp\SeleniumAutomation\");
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(25);
}
[Test]
public void Test()
{
driver.Url =
"file:///C:/Users/Hunza/KM/Selenium/Application/SeleniumExampleSite.html";
IWebElement listOfCars =
driver.FindElement(By.Id("cars"));
SelectElement selectObject = new
SelectElement(listOfCars);
selectObject.SelectByText("Santro");
driver.FindElement(By.Id("inp1")).SendKeys("50000");
driver.FindElement(By.Id("inp2")).SendKeys("10");
driver.FindElement(By.Id("inp3")).SendKeys("10");
driver.FindElement(By.TagName("button")).Click();
String strValue =
driver.FindElement(By.Id("disp")).Text;
String strValue2 =
selectObject.SelectedOption.Text;
Assert.AreEqual("5000", strValue);
Assert.AreEqual("Santro", strValue2);
}
[TearDown]
public void CloseBrowser()
{
driver.Close();
}
}
}
|
How to handle Alert in Selenium WebDrive
Alert interface provides the below few methods which are
widely used in Selenium Webdriver.
1) void Dismiss() // To click on the 'Cancel'
button of the alert.
driver.SwitchTo().Alert().Dismiss();
2) void Accept() // To click on the 'OK' button of
the alert.
driver.SwitchTo().Alert().Accept();
3) String Text() // To capture the alert message.
String strText= driver.SwitchTo().Alert().Text;
4) void SendKeys(String stringToSend) // To send
some data to alert box.
driver.SwitchTo().Alert().SendKeys("Text");
5) void SetAuthenticationCredentials(String user, String
password) // To send used id and password to alert box.
driver.SwitchTo().Alert().SetAuthenticationCredentials("Ali",
"123456");
Example Three (Verify Alert message)
using System;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
namespace SeleniumTesting
{
[TestFixture]
class SeleniumTestThree
{
IWebDriver driver;
IAlert alert;
[SetUp]
public void StartBrowser()
{
driver = new
InternetExplorerDriver(@"C:\Users\Hunza\SeleniumCsharp\SeleniumAutomation\");
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(25);
}
[Test]
public void Test()
{
driver.Url =
"file:///C:/Users/Hunza/KM/Selenium/Application/SeleniumExampleSite.html";
driver.FindElement(By.Id("bt2")).Click();
alert =
driver.SwitchTo().Alert();
alert.Accept();
String message =
driver.FindElement(By.Id("demo")).Text;
Assert.AreEqual("Hello Harry Potter! How are you today?",
message);
driver.FindElement(By.Id("bt2")).Click();
alert = driver.SwitchTo().Alert();
alert.Dismiss();
message =
driver.FindElement(By.Id("demo")).Text;
Assert.AreEqual("User cancelled the prompt.", message);
}
[TearDown]
public void
CloseBrowser()
{
driver.Close();
}
}
}
|
Locating Object using Xpath:
Xpath: XPath is defined as XML path. XPath is used to find
the location of any element on a webpage using HTML DOM structure.
(*) is
default tagName in Xpath = //div[1]/*[@id='bt1']
TagName can be any
html tag like button, input, select, div, p etc.
attributes like id ,
name, classname, class, type, tooltip, value etc
Locating Object using Xpath:
Xpath functions:
1. contains(): to find element with partial text. It used
when value changed dynamically.
xpath=//*[contains(@type,'sub')]
example:
//*[contains(@id, 'bt')]
2. type(): to find element with exact text match. It used
when value is fixed
xpath=//tabName[text()='value'],
example:
//*[text()='Click for Alert']
3. start-with(): to find element matching with starting
characters
xpath=//tabName[starts-with(@attribut,'start
value')]
example: //*[starts-with(text(),'Loan')]
4. AND & OR operators
xpath=//tabName[@attribut1='value1'
AND @attribut2='value2']
xpath=//tabName[@attribut1='value1'
OR @attribut2='value2']
5. following: Selects all the elements in the document
following current node
xpath=//tabName1[@attribut='value']//following::tabName2
//*[@type='textbox']//following::button
//*[@type='textbox']//following::button[2]
6. preceding: Selects all the elements in the document
preceding current node
xpath=//tabName1[@attribut='value']//preceding::tabName2
7. ancestor: selects all ancestors element (grandparent,
parent, etc.) of the current node
xpath=//tabName1[@attribut='value']//ancestor::tabName2
8. descendant: selects all descendant elementsof the current
node
xpath=//tabName1[@attribut='value']//descendant::tabName2
9. child: selects all child element of the current node
xpath=//tabName1[@attribut='value']//child::tabName2
//select//child::*
Locating Object using cssSelector:
cssSelector: CSS
Selectors are string patterns used to identify an element based on a
combination of HTML tag, id, class, and attributes.
- Tag and ID: syntax - tag#id
- Tag and Class: syntax - tag.class
- Tag and Attribute: syntax - tag[attribute=value]
- Tag, class, and attribute: -
tag.class[attribute=value]
- Inner text: -
tag:contains("inner text")
Wait in Selenium
Why do we required wait in Selenium?
Most of the web
applications are developed using Ajax and Javascript. When a page
is loaded by the browser the elements which we want to interact with may load
at different time intervals.
It makes difficult
to identify the element on web page, also it will throw an "ElementNotVisibleException"
exception during the automation script execution which result in fail the
script. To resolve the issue we use following types of wait in selenium.
l Implicit
Wait
l Explicit
Wait
Implicit wait
Implicit wait – An implicit wait is to tell WebDriver to
poll the DOM for a certain amount of time when trying to find an element or
elements if they are not immediately available. The default setting is 0. Once
set, the implicit wait is set for the life of the WebDriver object instance.
Webdriver wait
for specified amount of time before it throws exception
“NoSuchElementFoundException”
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(25);
driver.Manage().Timeouts().ImplicitWait
= TimeSpan.FromSeconds(25);
The TimeSpan can be in FROMMICROSECONDS, FROMMINISECONDS,
SECONDS, FROMMINUTES, FROMHOURS or FROMDAY
Explicit Wait
Explicit wait – WebDriver wait for certain condition to
occur before proceeding further in combination of WebDriverWait and .Until(Your
Condition) method became true.
There are some convenience methods provided that help you
write code that will wait only as long as required.
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver,
TimeSpan.FromSeconds(25));
Func<IWebDriver, bool> waitForElement = new Func<IWebDriver,
bool>((IWebDriver Web) =>
{
Console.WriteLine(Web.FindElement(By.Id("target")).GetAttribute("innerHTML"));
return
true;
});
wait.Until(waitForElement);
Keyboard & Mouse event using Action Class
Selenium has provided Action interface and Actions class to
perform complex mouse and keyboard
events. The following are the
most commonly used keyboard and mouse events provided by the Actions class
API
Reference: OpenQA.Selenium.Interactions.Action;
OpenQA.Selenium.Interactions.Actions;
Method
|
Description
|
ClickAndHold()
|
Clicks (without releasing) at the current
mouse location
|
MoveToElement(toElement)
|
Moves the mouse to the middle of the element
|
MoveByOffset(x-offset,
y-offset)
|
Moves the mouse from its current position (or
0,0) by the given offset.
|
DragAndDrop(source,
target)
|
Performs click-and-hold at the location of
the source element, moves to the location of the target element, then
releases the mouse.
|
ContextClick()
|
Performs a context-click at the current mouse
location.
|
DoubleClick()
|
Performs a double-click at the current mouse
location
|
Release()
|
Releases the depressed left mouse button at
the current mouse location
|
Build()
|
Generates a composite action containing all
actions so far, ready to be performed
|
Perform()
|
A convenience method for performing the
actions without calling build() first.
|
KeyDown() & KeyUp()
|
Example 1:
WebDriver driver = new FirefoxDriver();
driver.get(“www.google.com”)
WebElement field=driver.findElement(By.id(“lst-ib”));
Actions action =
new Actions(driver);
Action act= action.moveToElement(field).build();
act.perform()
Or
action.moveToElement(field).build().perform;
Or
action.moveToElement(field).perform;
|
Handling Ajax call in Selenium
AJAX stands
for Asynchronous JavaScript & XML, and it allows the Web page to
retrieve small amounts of data from the server without reloading the entire
page.
To test
Ajax application, different wait methods should be applied
• ThreadSleep
• Implicit Wait
• Explicit Wait
Taking Screen shots
API: org.openqa.selenium.TakesScreenshot;
Taking
Screenshot in Selenium is a 3 Step process
Step 1) Convert web driver object to
TakeScreenshot
TakesScreenshot
scrShot =((TakesScreenshot)webdriver);
Step 2) Call getScreenshotAs method to
create image file
File
SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Step 3) Copy file to Desired Location
File
DestFile=new File(fileWithPath);
FileUtils.copyFile(SrcFile,
DestFile);
Dynamic Web Table
Static Table: Where the number of rows and columns are fixed
Dynamic Table: Where the number of rows or columns are not
fixed
Example Link:
Reading number of columns:
List<WebElement> cols = driver.findElements(By.xpath("//*[@id="leftcontainer"]/table/thead/tr/th“));
cols.size();
Reading number of rows:
List<WebElement> rows= driver.findElements(By.xpath("//*[@id="leftcontainer"]/table/tbody/tr/td[1]“));
rows.size();
Nunit Suite
l
[Suite]
l
The Suite Attribute is used to define subsets
of suites based on user preference.
l
Example:
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
public class AllTests
{
[Suite]
public static TestSuite
Suite
{
get
{
TestSuite suite
= new TestSuite("All Tests");
suite.Add(new
OneTestCase());
suite.Add(new
Assemblies.AssemblyTests());
suite.Add(new
AssertionTest());
return suite;
}
}
}
}
|
Order Attribute in Nunit
• The
OrderAttribute may be placed on a test method or fixture to specify the
order in which tests are run. Ordering is given by the required order argument
to the attribute, an int.
public class MyFixture
{
[Test, Order(1)]
public void
TestA() { ... }
[Test, Order(2)]
public void
TestB() { ... }
[Test]
public void
TestC() { ... }
}
l Tests
with an OrderAttribute argument are started before any tests without the
attribute.
l Ordered
tests are started in ascending order of the order argument.
l Among
tests with the same order value or without the attribute, execution order is
indeterminate.
l Tests
do not wait for prior tests to finish. If multiple threads are in use, a test
may be started while some earlier tests are still being run.
Desired Capabilities
Desired capability is a series of value or key pairs that
stores the web browser properties such as browser name, browser version, the
path of the browser in the system etc which will help to determine the behavior
of the browser at run time.
Different types of Desired Capabilities Methods:
l getBrowserName()
l setBrowserName()
l getVersion()
l setVersion()
l getPlatform()
l setPlatform()
l getCapability
l SetCapability
The setCapability() method of the Desired Capabilities class
can be used to set the device name, platform version, platform name, absolute
path of the app under test
Import org.openqa.selenium.WebDriver;
Import org.openqa.selenium.ie.InternetExplorerDriver;
Import org.openqa.selenium.remote.DesiredCapabilities;
public class IEtestforDesiredCapabilities {
public static void main(String[] args) {
//it is used to define IE capability
DesiredCapabilities capabilities =
DesiredCapabilities.internetExplorer();
capabilities.setCapability(CapabilityType.BROWSER_NAME,
"IE");
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
System.setProperty("webdriver.ie.driver",
"C:\\IEDriverServer.exe");
//it is used to initialize the
IE driver
WebDriver driver = new
InternetExplorerDriver(capabilities);
driver.manage().window().maximize();
driver.get("http://gmail.com");
driver.quit();
}
}
|
C# Introduction
• C#
is object oriented programming language. It provides a lot of features that are
given below.
No comments:
Post a Comment