65
T EST AUTOMATION PRACTICE WITH S ELENIUM W EBDRIVER Csapó Péter Mikó Szilárd EPAM Systems, Budapest, 201 6

EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

Embed Size (px)

Citation preview

Page 1: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

TEST AUTOMATION PRACTICE

WITH SELENIUM WEBDRIVER

Csapó Péter

Mikó Szilárd

EPAM Systems, Budapest, 2016

Page 2: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

2

Basics Agenda

Assertion1

Navigation2

Interrogation3

Manipulation4

Page 3: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

3

Basics 1

ASSERTION

Page 4: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

4

Assertion

Fail method

fail(error_message)

Conditional assert

assertTrue(error_message, boolean_condition)

Equality assert

assertEquals(error_message, expected, actual)

Provide meaningful messages in assertions!

Page 5: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

5

Assertion

Identity assert

assertSame(error_message, expected_object, actual_object)

Custom assert

assertThat(actual_object, Matcher<object> matcher)

String assert

assertThat("myString", containsString("ring"))

Click here for more JUnit assertions

Benefits of assertThat

Page 6: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

6

Basics 2

NAVIGATION

Page 7: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

7

Navigation

• driver.get(java.lang.String)

• driver.navigate().to(java.lang.String)

• driver.navigate().to(java.net.URL)

Loading a web page in current browser window

Page 8: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

8

Navigation

• driver.navigate().back()

• driver.navigate().forward()

Move back & forward

Refresh page

• driver.navigate().refresh()

Page 9: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

9

Basics 3

INTERROGATION

Page 10: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

10

Interrogation

• driver.getTitle()

Window Title

Current URL

Page Source

• driver.getCurrentUrl()

• driver.getPageSource()

Page 11: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

11

Interrogation

• driver.findElement(org.openqa.selenium.By)

– 0 match -> throws exception

– 1 match -> returns a WebElement instance

– 2+ matches -> returns only the first match from web page

• driver.findElements(org.openqa.selenium.By)

– 0 match -> returns an empty list

– 1 match -> returns a list with one WebElement

– 2+ matches -> returns list with all matching WebElements

Locating web elements

Page 12: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

12

Interrogation

• Supports various locator strategies

• By locating mechanisms

– id

– className

– linkText

– partialLinkText

– name

– tagName

– cssSelector

– xpath

By class

Page 13: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

13

Interrogation

• Firefox

– Firebug add-on (Right click -> Inspect element / F12)

– Firefinder add-on (Try out your CSS & Xpath expressions)

• Chrome

– Built-in (Right click -> Inspect element / F12)

• IE

– Built-in (Tools -> Developer Tools / F12)

Inspecting elements in web browsers

Page 14: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

14

Interrogation

• driver.findElement(By.id(”some_id”));

• Ideal solution, however…

– Ids don’t always exist

– Their uniqueness is not enforced

– Used by developers as well

Id

ClassName

• driver.findElement(By.className(”some_class_name”));

Page 15: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

15

Interrogation

• driver.findElement(By.linkText(”Sign in”));

• driver.findElement(By.partiallinkText(”Sign”));

Linktext

Name

• <input id=”modCustLoginPassword” name=”password”>

• driver.findElement(By.name(”password”));

Page 16: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

16

Interrogation

tagName

• <label>Email address</label>

• driver.findElement(By.tagName(”label”));

Support classes

• Return all that matches each of the locators in sequence

– driver.findElements(new ByChained(by1, by2))

• Return all that matches any of the locators in sequence

– driver.findElements(new ByAll(by1, by2))

Page 17: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

17

Interrogation

CssSelector

• Absolute path

– driver.findElement(By.cssSelector(”html>body>div>p>input”));

• Relative path

– driver.findElement(By.cssSelector(”input”));

• Attribute selection

– driver.findElement(By.cssSelector(”button[name]”));

– driver.findElement(By.cssSelector(”button[name=‚cancel’]”));

– driver.findElement(By.cssSelector(”img:not[alt]”));

Page 18: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

18

Interrogation

CssSelector

• Id selection

– driver.findElement(By.cssSelector(”#save”));

• Class selection

– driver.findElement(By.cssSelector(”.login”));

• Combined selection

– driver.findElement(By.cssSelector(”button#save”));

– driver.findElement(By.cssSelector(”input.login”));

Page 19: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

19

Interrogation

CssSelector

• First matching child of the specified tag

– driver.findElement(By.cssSelector(”div#students:first-child”));

• Nth matching child of the specified tag

– driver.findElement(By.cssSelector(”#loginForm:nth-child(3)”));

• First matching enabled tag

– driver.findElement(By.cssSelector(”button:enabled”));

Page 20: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

20

Interrogation

XPath

• Absolute path

– driver.findElement(By.xpath(”html/body/p/input”));

• Relative path

– driver.findElement(By.xpath(”//input”));

• Attribute selection

– driver.findElement(By.xpath(”//input[@id=’username’]”));

– driver.findElement(By.xpath(”//*[@id=’myId’]”))

Page 21: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

21

Interrogation

Element interrogation

• element.getText();

• element.getAttribute();

• element.getTagName();

• element.isDisplayed();

• element.isEnabled();

• element.isSelected(); -> checkbox is selected or not

• selectElement.isMultiple(); -> multi select listbox or not

• selectElement.getOptions(); -> listbox select options

Page 22: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

22

Basics 4

MANIPULATION

Page 23: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

23

Manipulation

• element.click()

– Button

– Link

– Checkbox

– Combobox

Click

Submit

• form.submit()

– Form

Page 24: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

24

Manipulation

• New Actions(driver).keyDown(Keys.SHIFT).click(element).

keyUp(Keys.SHIFT).build().perform();

Shift + Click

Special Actions

• new Actions(driver).moveToElement(element).build().perform();

• new Actions(driver).contextClick().build().perform();

• new Actions(driver).doubleClick().build().perform();

• new Actions(driver).clickAndHold().build().perform();

• new Actions(driver).release().build().perform();

Page 25: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

25

Manipulation

• element.sendKeys(”string”)

– Input field

Type text

Clear text

• element.clear()

Page 26: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

26

Manipulation

• new Select(element).selectByIndex(elementCount)

Listbox Selection

Listbox Manipulating Commands

• select[ByIndex, ByVisibleText, ByValue]

• deselect[ByIndex, ByVisibleText, ByValue]

• deselectAll()

Page 27: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

27

Questions

Page 28: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

28

Advanced Agenda

Synchronization1

Window Handling2

Screenshots3

Browser Profile4

Cookies5

Page 29: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

29

Advanced 1

SYNCHRONIZATION

Page 30: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

30

Synchronization

• Sets the amount of time to wait for a page load to complete

• Global setting of the Webdriver object

• Negative value means indefinite wait time

Page Load Timeout

Example

• driver.manage().timeouts(). pageLoadTimeout(30, TimeUnit.SECONDS);

Page 31: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

31

Synchronization

• Specifies the waiting time for element not immediately visible

• Global setting of the Webdriver object

• 0 by default

Implicit Wait

Example

• driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

Page 32: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

32

Synchronization

• Waiting for a certain condition

• Poor alternative

– Thread.sleep(1000);

• Recommended

– WebDriverWait class

Explicit Wait

Example

• WebDriverWait wait = new WebDriverWait(driver, TIME_OUT_IN_SECONDS);

• wait.until(ExpectedConditions.method);

Page 33: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

33

Synchronization

• presenceOfElementLocated(By locator)

• textToBePresentInElement(WebElement element, java.lang.String text)

• titleContains(java.lang.String title)

• visibilityOf(WebElement element)

• invisibilityOfElementLocated(By locator)

• elementToBeSelected(WebElement element)

• elementToBeClickable(By locator)

ExpectedConditions class

Click here for more ExpectedConditions

Page 34: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

34

Advanced 2

WINDOW HANDLING

Page 35: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

35

Window Handling

• driver.manage().window().getSize()

• driver.manage().window().setSize(Dimension d);

• driver.manage().window().maximize();

Size

• driver.manage().window().getPosition()

• driver.manage().window().setPosition(Point p);

Position

.getHeight();

.getWidth();

.getX();

.getY();

Page 36: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

36

Window Handling

• String windowHandle = driver.getWindowHandle();

• Iterator<String> windowIterator = driver.getWindowHandles();

• new ArrayList<String>(driver.getWindowHandles());

Handles

• driver.switchTo().window(windowHandle);

Switch To

Page 37: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

37

Advanced 3

SCREENSHOTS

Page 38: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

38

Screenshots

• Keep track of changing UI

• Store pages with error

Advantages

• File screenshot =

((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

• FileUtils.copyFile(screenshot, new File(fileSource));

Example

Page 39: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

39

Advanced 4

BROWSER PROFILE

Page 40: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

40

Browser Profile

• c:\Users\[user]\AppData\Roaming\Mozilla\Firefox\Profiles\

• Unlimited number of profiles

• Stores many user attributes

– Passwords

– Bookmarks

– Browser history

– Settings

– Etc.

Introduction

Page 41: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

41

Browser Profile

• Set preferred language

• Change User Agent

• Set trusted sites

• Disable confirmation dialog

• Enable Firefox extensions, e.g. Firebug and Firefinder

• Enable native events for drag-and-drop

Usages

Page 42: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

42

Browser Profile

• var profile= new FirefoxProfile();

• profile.setPreference("intl.accept_languages", "de");

• WebDriver driver = new FirefoxDriver(profile);

• Search for preference keys on Firefox by about:config

• Get all special pages about:about

Set preferred language

Page 43: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

43

Browser Profile

• var profile= new FirefoxProfile();

• profile.setPreference("general.useragent.override", "Mozilla/5.0(iPad; U; CPU iPhone OS 3_2

like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314

Safari/531.21.10");

Changing user agent

Page 44: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

44

Advanced 5

COOKIES

Page 45: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

45

Cookies

• Useful for testing the login feature

• Getting or setting session IDs

• Cookie attributes

– Name

– Value

– Domain

– Path

– Expiry

– Secure

– Http only

Introduction

Page 46: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

46

Cookies

• Get all cookies from the current session

– driver.manage().getCookies();

• Get cookie with a given name

– driver.manage().getCookieNamed(cookieToTest);

Interrogation

Page 47: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

47

Cookies

• Delete all cookies from the current session

– driver.manage().deleteAllCookies()

• Delete a specific cookie

– driver.manage().deleteCookie(TestCookie);

• Delete cookie with a given name

– driver.manage().deleteCookieNamed(cookieToTest);

Manipulation

Page 48: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

48

Cookies

• Add a specific cookie

– Cookie cookie = new Cookie("mycookie", "123456");

– driver.manage().addCookie(cookie);

• Domain attribute is the current document by default

Manipulation

Page 49: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

49

Questions

Page 50: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

50

Test Design Agenda

Data Driven Testing1

Page Object Model2

Page 51: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

51

Test Design 1

DATA DRIVEN TESTING

Page 52: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

52

Data Driven Testing

• Use pre-stored data as input and expected output

• Run your script to get actual output and compare them

• Continue testing with the next set of data

Concept

Page 53: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

53

Data Driven Testing

• Database

• XML file

• Property file

• Etc.

Possible data sources Pros of Data Driven Testing

• Repeatability and reusability

• Separation of test code and data

• Reduction in number of tests

Page 54: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

54

Data Driven Testing

• Testing different localizations of a site

– <testData lang="en" phone="(+36-1) 444 44 99" />

– <testData lang="hu" phone="06 (40) 49 49 49" />

Where to use

Page 55: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

55

Data Driven Testing

• Use JUnitParamsRunner class

– @RunWith(JUnitParamsRunner.class)

– public class Testclass { … }

• Add test parameters

– @Parameters(method = "testData")

– public void testCase(String param1, String param2) { … }

How to use

Page 56: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

56

Test Design 2

PAGE OBJECT MODEL

Page 57: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

57

Page Object Model

• New Approach

• @FindBy annotation

• PageFactory class

• Page Flow

• Best practices

Agenda

Page 58: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

58

Page Object Model

• Every UI change could cause a lot of test maintenance work

• We have to keep maintenance changes as low as possible

• We minimize the change sensitive automation code

New Approach

Page 59: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

59

Page Object Model

• We accept that the application and its elements are bound to change

• We create a new layer which contains change prone data

• This way we can adapt to changes with minimal refactoring cost

How to do it

Page 60: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

60

Page Object Model

• What describes one page should be in one class

• Use class methods to interact with your page

• This class represents your page in the test code

• Divide complex pages into smaller components called widgets

• Create widgets with the same approach as pages

Rules

Page 61: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

61

Page Object Model

• We mark elements with the @FindBy annotation

• FindBy directs Webdriver to locate an element

1. @FindBy(how = How.ID, using = "i")

public WebElement routeFrom;

2. @FindBy(id = "i")

public WebElement routeFrom;

3. public WebElement i;

@FindBy Annotation

Page 62: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

62

Page Object Model

• You can instantiate page/widget WebElements using the PageFactory class

• Use static method initElements

• WebElements are evaluated lazily

PageFactory Class

Example

• PageFactory.initElements(WebDriver driver, PageObjectClass.class);

• initElements returns PageObjectClass instance

Page 63: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

63

Page Object Model

• We want to describe the logical relationship between pages

• Manipulation methods should reflect these relationships

• We should return a page object class after each method

• Return itself if we stay at the same page (e.g. typing)

• Return next page if we navigate (e.g. submit)

Page Flow

Page 64: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

64

Page Object Model

• Create base pages to represent common parts

– E.g. same header, footer, sidebar

• Reuse common widgets in each affected pages

• Use your pages to initiate and confirm the success of navigation

• Put your verification methods inside the page object as well

Best practices

Page 65: EST AUTOMATION PRACTICE SELENIUM WEBDRIVERcompalg.inf.elte.hu/~attila/materials/Webdriver_JAVA.pdf · TEST AUTOMATION PRACTICE WITH SELENIUM WEBDRIVER ... •driver.findElements(org.openqa.selenium.By)

65

Questions