Automation - web testing with selenium

Post on 23-Jan-2017

110 views 4 download

transcript

Automation Tests with Selenium

© By Tzirla Rozental

Agenda:What is QA Automation?What and How to Automate?Create ProjectCode Planning & DesignSelenium selectorsRun testFailures

What is QA Automation Tests?Software executes and replaces

tasks that done manually Automates tasks that are

impossible to do manually

What and How to Automate?

2. What is the interface that needs to be tested? (CLI, API, GUI ?)

? ?

How to pick the right tool?

Ease of Use Tool availability Support all kinds of tests you need Able to create Automated Tests Without

Programming Automated Test Scripting More: compare results, logging, exporting,

support multi kinds of environments etc.

Features TestComplete Selenium UFTRecord and Playback Yes Limited Yes

Scripting Languages

Python, VBScript, JScript, C++, C#,

and Delphi

Java, C#, Ruby, Python, Perl, PHP ,

JavascriptVBScript

IDE Integrations VisualStudio and RADStudio

Intellij, Eclipse, Visual Studio None

Unit Testing Support

PyUnit, Ruby, PHPUnit, JUnit, NUnit,

and TestNG

Java, C#, Ruby, Python,Perl, PHP ,

JavascriptVBScript

BDD/TDD Support Yes Manual None

Data-Driven Testing Yes Manual Yes

Source Control Management

Git, Subversion, Visual SourceSafe,

CVS, Team Coherence

Manual Git and Subversion

Writing the web Automation tests

with Selenium Web

Driver

Install and Create the Project:

1. Install java2. Install Eclipse and select Workspace3. Install Selenium (last version)

http://www.softwaretestinghelp.com/webdriver-eclipse-installation-selenium-tutorial-9/4. Install Maven (for Maven project) – From eclipse Marketplace5. Create a Maven Project6. Install TestNG and configure to right version – From eclipse Marketplace7. Download jar for browser (for example: ‘chromedriver.exe’ for running tests

on Chrome)I

Select the Workspace:

Create maven project

From Top menu select File ->New -> Other

In the pop-up window select Maven and continue according the steps in above link:

See full scenario:http://toolsqa.com/java/maven/create-new-maven-project-eclipse/

Install plugins from Eclipse MarketplaceIn top menu select Help -> Eclipse Marketplace

Search for plugin and install

Code Planning & Design

Before Starting:‘test’ package and ‘src’ package

3 Layer model:

Test

BusinessLogic

Page

Common Package – static classes

General – static arguments that are sets one a run

SeleniumActions – include all selenium selectors functions

Utils – manage the activation of the run

Inheritance in ‘tests’ layer – Actions in BaseTest – set the logger and driver

@BeforeClass – set logger and Driver

@AfterClass – stop the driver

Check actions that needed for test -> TODO

Page Layer

Inheritance in page – BasePage.java

Inheritance in page – child pages classes extends from the BasePage.java

HomePage.java RegistrationPage.java

Finding Elements:• Using inspect in browser• Selenium elements locators• Css and xpath • findElement() and findElements()

Can see more in:http://www.slideshare.net/LivePersonDev/selenium-webdriver-element-locators

Inspect in browser

Selenium element locators:

Id –> driver.findelement(By.id(“id”)) Name -> driver.findelement(By.name(“name

attribute”)) Tag name -> driver.findelement(By.tagname(“a”)) LinkText->

driver.findelement(By.linktext(“text_on_link”)) Css -> driver.findelement(By.cssselector(“#id”)) xpath -> driver.findelement(By.xpath(“//*[@id=‘id’]”)) Text -> driver.findelement(By.text(“visible text”))

Css and Xpath

By css – for example: Id: “#elementid” Class: “.elementclass” Otherattribute:

“th[style=‘style’]” Otherattribute – not specific

tag:“[style=‘style’]”

Contains: “[class*=‘cl’]” Absolute path: “tbody>tr>td” Not absolute path: “tbody td”

By xpath – for example: “//table[@id=‘tableid’]” “//table[@class=‘classname’]” “//table[@disabled=‘false’]” “//*[@style=‘style’]”

“//table[contains(@style,’top’)]”

“//table/tbody/tr/td” “tbody//td”

findElement() and findElements()

findElement() findElements()

0 matches

throw exception (NoSuchElement

exception) returns empty list

1 match return the found elementreturns list with one

element2+

matchesreturns only the first one

that foundreturns list with all found

elements

Actions on Element

Selenium Element.Click() Element.Clear() Element.Sendkeys(text) Selenium execute script with java script

query: jsClick() mouseover()

Init page – PageFactory @FindBy

(how = How.ID, using = “elementId")WebElement element

@FindAll({@FindBy(how = How.ID, using = “elementId1"),@FindBy(how = How.ID, using = “elementId2") })WebElement someElement

Init page syntacs :Wrong: Page page1 = new Page();Correct: Page page1 = PageFactory.initElement(WebDriver driver, Page.class);

Business Logic Layer

BusinessLogic layer – Mediator between the Test and the page Processing commands (send to click on element) Coordinating workflow (test sent to got message after click on

element) Maintaining application state (current data in page) Accessing data(from page or other, get data from displayed

message) Making logical decisions Performing calculations Page Object – BL layer get and returns an object with data from

page

Write the @Test

Use method created before in page layer and BL layer

Write as the steps order in manual test Add logs:

Explain what each step is going to check Assert – apply the checking Leave clean area at the end of the test

@Annotations

TestNG annotations - @Test, @BeforeMethod, @AfterMethod etc.

Java,lang annotations - @Override, @Deprecated etc.

Org.openqa.selenium.supportannotations - @FindBy, @FindAll etc.

Run / Debug Test with TestNG

Run / Debug Configuration:

Select Class and MethodSet system property (if needed)

OOPS… FailuresCheck Test FailedtackeScreenshot() Method will keep the

site appearance when test failedCheck ExceptionCheck in logFailures reasons: automation code issue/

dev changes / bug

Good Luck!