gui testing 2015-01-30, novatec // le. why test the gui?

26
GUI TESTING 2015-01-30, NOVATEC // LE

Upload: coleman-riggles

Post on 11-Dec-2015

227 views

Category:

Documents


2 download

TRANSCRIPT

GUI TESTING

2015-01-30, NOVATEC // LE

WHY TEST THE GUI?

Web-UI Testing mit testIT - WebTester3

Why test the GUI?

30.01.2015

User Interface

API

Business

Persistence

Unit-Tests

Component-Tests

Integration-Tests

System-Test

Web-UI Testing mit testIT - WebTester4

Why test the GUI?

30.01.2015

The User Interface …

… is part of the application.

… is an entry point into the system.

… is what the customer perceives as THE „application“.

… contains it‘s own business logic.

DIFFERENT KINDS OF GUI-TESTS

6

Agile Testing Pyramid

30.01.2015 Web-UI Testing mit testIT - WebTester

Technology

Business

Detail

Complexity / Cost

Unit Tests

Quantity

Manual,Exploratory

Testing

AutomatedUI-Tests

Service Layer Tests(API-Layer)

Unit & Component Tests

7

GUI-Testing Pyramid

30.01.2015 Web-UI Testing mit testIT - WebTester

Unit Tests

UISystemTests

UI Integration Tests

UI “Unit” Tests

8

Different Kinds of GUI-Tests

30.01.2015 Web-UI Testing mit testIT - WebTester

UI

Mock-API

UI „Unit“ UI Integration

API

Business

Persistence

UI System

PAGE OBJECT PATTERN

10

Scenario: Login

30.01.2015 Web-UI Testing mit testIT - WebTester

Hello testuser!

testuser

********

LOGIN

Username:

Password:

login.html main.html

11

Scenario: Login with default Selenium code (and no optimization)

30.01.2015 Web-UI Testing mit testIT - WebTester

@Testpublic void testValidLogin () { webDriver.findElement(By.id("username")).sendKeys("testuser"); webDriver.findElement(By.id("password")).sendKeys("123456"); webDriver.findElement(By.id("login")).click(); String headline = webDriver.findElement(By.id("headline")).getText(); assertThat(headline, is("Hello testuser!"));}

@Testpublic void testInvalidLogin () { webDriver.findElement(By.id("username")).sendKeys(„foo"); webDriver.findElement(By.id("password")).sendKeys("123456"); webDriver.findElement(By.id("login")).click(); String errorMessage = webDriver.findElement (By.id("errorMessage")).getText(); assertThat(errorMessage, is("Wrong Credentials!"));}

12

Scenario: Login

30.01.2015 Web-UI Testing mit testIT - WebTester

Hello testuser!

testuser

********

LOGIN

Username:

Password:

login.html main.html

LoginPage.java MainPage.java

13

Scenario: Login with Page Objects

30.01.2015 Web-UI Testing mit testIT - WebTester

@Testpublic void testValidLogin () { MainPage mainPage = loginPage.login("testuser", "123456"); assertThat(mainPage.getWelcomeMessage(), is("Hello testuser!"));}

@Testpublic void testInvalidLogin () { loginPage = loginPage.loginExpectingError("foo", "123456"); assertThat(loginPage.getErrorMessage(), is("Wrong Credentials!"));}

14

Different kinds of Page Object methods

30.01.2015 Web-UI Testing mit testIT - WebTester

Hello testuser!

testuser

********

LOGIN

Username:

Password:Actions

Information Getter

Navigations

Workflows

15

Page Object Pattern: Actions

30.01.2015 Web-UI Testing mit testIT - WebTester

public LoginPage setUsername(String value){ username.sendKeys(value); return this;}

public LoginPage setPassword(String value){ password.sendKeys(value); return this;}

16

Page Object Pattern: Navigations

30.01.2015 Web-UI Testing mit testIT - WebTester

public MainPage clickLogin(){ login.click(); return createPageObject(MainPage.class);}

public LoginPage clickLoginExpectingError(){ login.click(); return createPageObject(LoginPage.class);}

17

Page Object Pattern: Workflows

30.01.2015 Web-UI Testing mit testIT - WebTester

public MainPage login(String username, String password){ return setUsername(username).setPassword(password) .clickLogin();}

public LoginPage loginExpectingError(String username, String password){ return setUsername(username).setPassword(password) .clickLoginExpectingError();}

18

Page Object Pattern: Information Getter

30.01.2015 Web-UI Testing mit testIT - WebTester

public String getErrorMessage () { return errorMessage.getText();}

public List<String> getErrorMessages () { List<String> returnValue = new LinkedList<>(); for(ErrorMessage message : errorMessages){ returnValue.add(message.getText()); } return returnValue;}

Web-UI Testing mit testIT - WebTester19

Page Object Pattern

30.01.2015

With the help of the Page Object Pattern…

… GUI-Tests are maintainable.

… new tests can be implemented with ease and speed.

… tests focus on the “WHAT” not on the “HOW”.

WEB-TESTER

Web-UI Testing mit testIT - WebTester21

What is testIT WebTester?

30.01.2015

Best Practices from ears of actual project experience

Page Object Pattern as a framework

Efficiency-oriented

Extendable in order to adapt to different functional and technological project contexts

22

WebTester

What is testIT WebTester?

30.01.2015 Web-UI Testing mit testIT - WebTester

Selenium

Browser

Testcode

Web-UI Testing mit testIT - WebTester23

WebTester Feature: Typesave API (Functional Classes)

30.01.2015

Web-UI Testing mit testIT - WebTester24

WebTester Feature: Event System

30.01.2015

EventRegistry

click()

EventListener

EventListener

EventListener

Web-UI Testing mit testIT - WebTester25

WebTester Feature: Extendibility

30.01.2015

You can …

… call the Selenium API directly if any feature is missing.

… create custom Page Objects for project specific components and widgets.

… create custom Event Listeners, f.e. to handle exceptions.

… create custom Browser Factories in order to customize the Web Driver to project specifications.

THE END

2015-01-30, NOVATEC // LE