SlideShare a Scribd company logo
1 of 54
1CONFIDENTIAL
Screenplay Design
Pattern for QA
Automation
ROMAN SOROKA
December, 2016
2CONFIDENTIAL
SCREENPLAY DESIGN PATTERN
FOR QA AUTOMATION
ROMAN SOROKA
December 15, 2016
3CONFIDENTIAL
ROMAN SOROKA
• Lead test automation engineer in EPAM
• Activist of COMAQA.by community
• Over 7 years in IT.
• Relocated to Minsk from Moscow
• Roles in the career: developer, software engineer in
test, QA lead, delivery manager.
4CONFIDENTIAL
Roman Soroka
rnsoroka@gmail.com
5CONFIDENTIAL
The ground rules
6CONFIDENTIAL
2
1
3
Agenda
SOLID
Principles
• Do you remember any development principles?
• What is the best size for the class?
• Which principles are violated by Page Object?
Best practices
• What is the right size for the class?
• How to write easy to maintain classes?
• How user stories and acceptance criteria can help?
Screenplay
Pattern
• What is an actor-centric model?
• How Screenplay pattern can help?
• Will you change your approaches to GUI test automation?
7CONFIDENTIAL
8CONFIDENTIAL
•Remember we are
developing
software!
We are developers
9CONFIDENTIAL
10CONFIDENTIAL
11CONFIDENTIAL
12CONFIDENTIAL
13CONFIDENTIAL
14CONFIDENTIAL
15CONFIDENTIAL
16CONFIDENTIAL
• There is a clean separation between test code and page specific code such as locators (or their use
if you’re using a UI Map) and layout.
• There is a single repository for the services or operations offered by the page rather than having
these services scattered throughout the tests.
• A page object is an object-oriented class that serves as an interface to a page of your AUT.
• The tests then use the methods of this page object class whenever they need to interact with the UI
of that page.
• The benefit is that if the UI changes for the page, the tests themselves don’t need to change, only
the code within the page object needs to change.
Page object pattern
Page Object advantages
Page Object ideas
17CONFIDENTIAL
Examples of Page Object
18CONFIDENTIAL
Page Element Action
SingleApplicationPage
Section1Base Section2Base FooterBase Actions1 UserData1
Section1Xyz Section2Xyz Footer1 Actions2
Section1Qwe Section2Qwe
Single page application
Data
UserData2
Actions3
19CONFIDENTIAL
20CONFIDENTIAL
Does size matter?
• "The first rule of classes is that they should
be small. The second rule of classes is that
they should be smaller than that.“
• Use your head as a benchmark.
What is the right size for java classes?
21CONFIDENTIAL
Does size matter?
• We want our systems to be composed of
many small classes, not a few large ones.
Each small class encapsulates a single
responsibility, has a single reason to
change, and collaborates with a few
others to achieve the desired system
behaviors.
22CONFIDENTIAL
23CONFIDENTIAL
Composition over Inheritance
24CONFIDENTIAL
User stories and acceptance criteria
25CONFIDENTIAL
• The Screenplay Pattern (aka Journey) is an
approach to writing high quality automated
acceptance tests based on good software
engineering principles such as
• the Single Responsibility Principle
• the Open-Closed Principle
– It favors composition over inheritance.
– It employs thinking from Domain Driven
Design to reflect the domain of performing
acceptance tests.
– It encourages good testing habits and well-
designed test suites that are easy to read,
easy to maintain and easy to extend.
– It enables teams to write more robust and
more reliable automated tests more
effectively.
Screenplay Design Pattern
26CONFIDENTIAL
Application under test and tools
• The application we will be testing is
the AngularJS implementation of the
well-known TodoMVC project.
• For simplicity, we will be using
Serenity BDD with Junit.
• Hamcrest matcher.
• And the long time promised
Screenplay pattern.
27CONFIDENTIAL
28CONFIDENTIAL
29CONFIDENTIAL
30CONFIDENTIAL
31CONFIDENTIAL
The exemplary acceptance criterion
Now suppose we are implementing the “Add new todo items” feature. This feature could have an
acceptance criterion along the lines of “Add a new todo item”. If we were testing these scenarios
manually, it might look like this:
Add a new todo item
• Start with an empty todo list
• Add an item called ‘Buy some milk’
• The ‘Buy some milk’ item should appear in the todo list
32CONFIDENTIAL
The example acceptance criterion
One of the big selling points of the Screenplay Pattern is that it lets you build up a readable API of
methods and objects to express your acceptance criteria in business terms. For example, using the
Screenplay Pattern, we could automate the scenario shown above very naturally like this:
@Test
public void should_be_able_to_add_a_todo_item() {
givenThat(james).wasAbleTo(Start.withAnEmptyTodoList());
when(james).attemptsTo(AddATodoItem.called("Buy some milk"));
then(james).should(seeThat(TheItems.displayed(), hasItem("Buy some milk")))
}
33CONFIDENTIAL
34CONFIDENTIAL
User Experience (UX) Design
In User Experience (UX) Design, we break down
the way a user interacts with an application
into goals (scenario titles), tasks (top-level of
abstraction in the scenario) and actions (the
lowest level of abstraction, below the tasks).
Layers of abstraction
• The goal describes the ‘why’ of the scenario
in terms of what the user is trying to
achieve in business terms.
• The tasks describe what the user will do as
high-level steps required to achieve this
goal.
• The actions say how a user interacts with
the system to perform a particular task,
such as by clicking on a button or entering a
value into a field.
The Screenplay Pattern encourages strong layers of
abstraction
35CONFIDENTIAL
The Screenplay Pattern uses an actor-centric model
36CONFIDENTIAL
• Actors need to be able to do things to perform
their assigned tasks. So we give our actors
“abilities”, a bit like the superpowers of a super-
hero, if somewhat more mundane. If this is a web
test, for example, we need James to be able to
browse the web using a browser.
– james.can(BrowseTheWeb.with(hisBrowser));
• To make it clear that this is a precondition for the
test (and could very well go in a JUnit @Before
method), we can use the syntactic sugar method
givenThat():
– givenThat(james).can(BrowseTheWeb.with(hi
sBrowser));
Actors have abilities
37CONFIDENTIAL
• An actor needs to perform a number of tasks to
achieve a business goal. A fairly typical example of
a task is “adding a todo item”, which we could
write as follows:
– james.attemptsTo(AddATodoItem.called("Buy
some milk"))
• Or, if the task is a precondition, rather than the
main subject of the test, we could write something
like this:
– james.wasAbleTo(AddATodoItem.called("Buy
some milk"))
Actors perform tasks
38CONFIDENTIAL
• The actor invokes the performAs() method on a
sequence of tasks
• Tasks are just objects that implement the Task
interface, and need to implement
the performAs(actor) method.
• You can think of any Task class as basically
a performAs() method alongside a supporting cast
of helper methods.
Actors perform tasks
39CONFIDENTIAL
Serenity task class example
public class AddATodoItem implements Task {
private final String thingToDo;
protected AddATodoItem(String thingToDo) {
this.thingToDo = thingToDo;
}
public static AddATodoItem called(String thingToDo) {
return Instrumented.instanceOf(AddATodoItem.class). withProperties(thingToDo);
}
@Step("{0} adds a todo item called #thingToDo")
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo( Enter.theValue(thingToDo) .into(NewTodoForm.NEW_TODO_FIELD)
.thenHit(RETURN) );
}
}
james.wasAbleTo(AddATodoItem.called("Buy some milk"));
40CONFIDENTIAL
• To get the job done, a high-level business task will
usually need to call either lower level business
tasks or actions that interact more directly with
the application. In practice, this means that
the performAs() method of a task typically
executes other, lower level tasks or interacts with
the application in some other way. For example,
adding a todo item requires two UI actions:
– Enter the todo text in the text field
– Press Return
Task decomposition
41CONFIDENTIAL
Tasks can be used as building blocks by other tasks
public class AddTodoItems implements Task {
private final List<String> todos;
protected AddTodoItems(List<String> items) {
this.todos = ImmutableList.copyOf(items);
}
@Step("{0} adds the todo items called #todos")
public <T extends Actor> void performAs(T actor) {
todos.forEach( todo -> actor.attemptsTo( AddATodoItem.called(todo) ) );
}
public static AddTodoItems called(String... items) {
return Instrumented.instanceOf(AddTodoItems.class). withProperties(asList(items));
}
}
givenThat(james).wasAbleTo(AddTodoItems.called("Walk the dog", "Put out the
garbage"));
42CONFIDENTIAL
UI elements are targets
In the Serenity Screenplay implementation, we use a special Target class to identify elements using
(by default) either CSS or XPATH. The Target object associates a WebDriver selector with a human-
readable label that appears in the test reports to make the reports more readable. You define a
Target object as shown here:
Target WHAT_NEEDS_TO_BE_DONE = Target.the( "'What needs to be done?' field").locatedBy("#new-
todo") ;
43CONFIDENTIAL
Page object data class
public class ToDoList {
public static Target WHAT_NEEDS_TO_BE_DONE = Target.the( "'What needs to be done?'
field").locatedBy("#new-todo");
public static Target ITEMS = Target.the( "List of todo items").locatedBy(".view label");
public static Target ITEMS_LEFT = Target.the( "Count of items left").locatedBy("#todo-count strong");
public static Target TOGGLE_ALL = Target.the( "Toggle all items link").locatedBy("#toggle-all");
public static Target CLEAR_COMPLETED = Target.the( "Clear completed link").locatedBy("#clear-
completed");
public static Target FILTER = Target.the( "filter").locatedBy("//*[@id='filters']//a[.='{0}']");
public static Target SELECTED_FILTER = Target.the( "selected filter").locatedBy("#filters li
.selected");
}
44CONFIDENTIAL
A typical automated acceptance test has three parts:
1. Set up some test data and/or get the application into a known state
2. Perform some action
3. Compare the new application state with what is expected.
From a testing perspective, the third step is where the real value lies – this is where we check that the application does
what it is supposed to do.
Actors can ask questions about the state of the application
45CONFIDENTIAL
Actors use their abilities to interact with the system
• The Todo application has a counter in
the bottom left hand corner indicating
the remaining number of items.
• We will use question object to check
the status of the displayed item.
• The test needs to check that the
number of remaining items is correct.
What is the right size for java classes?
46CONFIDENTIAL
Test itself
@Test
public void should_see_the_number_of_todos_decrease_when_an_item_is_completed() {
givenThat(james).wasAbleTo(Start.withATodoListContaining( "Walk the dog", "Put out the
garbage"));
when(james).attemptsTo( CompleteItem.called("Walk the dog") );
then(james).should(seeThat(TheItems.leftCount(), is(1)));
}
The test needs to check that the number of remaining items (as indicated by the “items
left” counter) is 1.
47CONFIDENTIAL
Auxiliary code
The static TheItems.leftCount() method is a simple factory method that returns a new
instance of the ItemsLeftCounter class:
public class TheItems {
public static Question<List<String>> displayed() {
return new DisplayedItems();
}
public static Question<Integer> leftToDoCount() {
return new ItemsLeftCounter();
}
}
This serves simply to make the code read in a fluent fashion.
48CONFIDENTIAL
Question objects
then(james).should(seeThat(TheItems.displayed(), hasItem("Buy some milk")));
This code checks a value retrieved from the application (the items displayed on the screen) against an
expected value (described by a Hamcrest expression). However, rather than passing an actual value,
we pass a Question object. The role of a Question object is to answer a precise question about the
state of the application, from the point of view of the actor, and typically using the abilities of the
actor to do so.
Questions are rendered in human-readable form in the reports:
49CONFIDENTIAL
The Question object
Question objects are similar to Task and Action objects. However, instead of
the performAs() used for Tasks and Actions, a Question class needs to implement
the answeredBy(actor) method, and return a result of a specified type.
public class ItemsLeftCounter implements Question<Integer> {
@Override public Integer answeredBy(Actor actor) {
return Text.of(TodoCounter.ITEM_COUNT) .viewedBy(actor) .asInteger();
}
}
The answeredBy() method uses the Text interaction class to retrieve the text of the
remaining item count and to convert it to an integer:
public static Target ITEMS_LEFT = Target.the("Count of items left"). locatedBy("#todo-
count strong");
50CONFIDENTIAL
• Like many good software development practices,
the Screenplay Pattern takes some discipline to
start with. Some care is initially required to design
a readable, DSL-like API made up of well-organised
tasks, actions and questions.
Screenplay is finished
51CONFIDENTIAL
Conclusion
The Screenplay Pattern is an approach to writing automated acceptance tests founded on good
software engineering principles that makes it easier to write clean, readable, scalable, and highly
maintainable test code. It is one possibile outcome of the merciless refactoring of the Page Object
pattern towards SOLID principles. The new support for the Screenplay Pattern in Serenity BDD opens a
number of exciting possibilities.
In particular:
• The declarative writing style encouraged by the Screenplay Pattern makes it much simpler to write
code that is easier to understand and maintain;
• Task, Action and Question classes tend to be more flexible, reusable and readable;
• Separating the abilities of an actor adds a great deal of flexibility. For example, it is very easy to
write a test with several actors using different browser instances.
52CONFIDENTIAL
Grattitude
Antony Marcano
Founding Consultant
is best known in the
community for his
thinking on BDD, user
stories, testing and
writing fluent APIs & DSLs
in Ruby, Java and more
John Ferguson Smart
Mentor | Author | Speaker
is an experienced author,
speaker and trainer
specialising in Agile
Delivery Practices,
currently based in
London.
Andy Palmer
Mentor | Team management | Speaker
is co-creator of the
ground-breaking
PairWith.us screencasts,
regular speaker at
international conferences;
Andy has shortened the
delivery cycles of projects
across numerous
organisations with his
expertise in taking
complex technology
problems and simplifying
them to their essence.
Jan Molak
Extreme Programming and Continuous
Delivery Consultant
is a full-stack developer
and coach who spent last
12 years building and
shipping software ranging
from award-winning AAA
video games and MMO
RPGs through websites
and webapps to search
engines, complex event
processing and financial
systems.
53CONFIDENTIAL
The Screenplay Pattern encourages strong layers of
abstraction
Designing Usable Apps: An agile approach to User Experience Design by Kevin Matz1
“A BIT OF UCD FOR BDD & ATDD: GOALS -> TASKS -> ACTIONS” – Antony Marcano,2
“A journey beyond the page object pattern” - Antony Marcano, Jan Molak, Kostas Mamalis3
JNarrate: The original reference implementation of the Screenplay Pattern4
The Command Pattern: “Design Patterns: Elements of Reusable Object-Oriented
Software”- Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
5
TodoMVC: The Todo application tested in this article6
54CONFIDENTIAL
THANK YOU FOR ATTENTION!

More Related Content

What's hot

Data driven testing
Data driven testingData driven testing
Data driven testingĐăng Minh
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDDDror Helper
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Expressjguerrero999
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And MockingJoe Wilson
 
How to go about testing in React?
How to go about testing in React? How to go about testing in React?
How to go about testing in React? Lisa Gagarina
 
Unit testing framework
Unit testing frameworkUnit testing framework
Unit testing frameworkIgor Vavrish
 
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Edureka!
 
Different wait methods or commands in Selenium
Different wait methods or commands in SeleniumDifferent wait methods or commands in Selenium
Different wait methods or commands in SeleniumVinay Kumar Pulabaigari
 
Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using SeleniumNaresh Chintalcheru
 
Google mock training
Google mock trainingGoogle mock training
Google mock trainingThierry Gayet
 
TestNG introduction
TestNG introductionTestNG introduction
TestNG introductionDenis Bazhin
 
Refactoring page objects The Screenplay Pattern
Refactoring page objects   The Screenplay Pattern Refactoring page objects   The Screenplay Pattern
Refactoring page objects The Screenplay Pattern RiverGlide
 
Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using SeleniumWeifeng Zhang
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverPankaj Biswas
 

What's hot (20)

Data driven testing
Data driven testingData driven testing
Data driven testing
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
Jest
JestJest
Jest
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Express
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And Mocking
 
How to go about testing in React?
How to go about testing in React? How to go about testing in React?
How to go about testing in React?
 
Unit testing framework
Unit testing frameworkUnit testing framework
Unit testing framework
 
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
 
Different wait methods or commands in Selenium
Different wait methods or commands in SeleniumDifferent wait methods or commands in Selenium
Different wait methods or commands in Selenium
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
Selenium
SeleniumSelenium
Selenium
 
Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using Selenium
 
Google mock training
Google mock trainingGoogle mock training
Google mock training
 
TestNG introduction
TestNG introductionTestNG introduction
TestNG introduction
 
Refactoring page objects The Screenplay Pattern
Refactoring page objects   The Screenplay Pattern Refactoring page objects   The Screenplay Pattern
Refactoring page objects The Screenplay Pattern
 
Selenium Concepts
Selenium ConceptsSelenium Concepts
Selenium Concepts
 
Selenium
SeleniumSelenium
Selenium
 
Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using Selenium
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium Webdriver
 

Viewers also liked

A journey beyond the page object pattern
A journey beyond the page object patternA journey beyond the page object pattern
A journey beyond the page object patternRiverGlide
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, javaCOMAQA.BY
 
От хаоса к автоматизации тестирования на примере Backend
От хаоса к автоматизации тестирования на примере BackendОт хаоса к автоматизации тестирования на примере Backend
От хаоса к автоматизации тестирования на примере BackendCOMAQA.BY
 
Advanced locators - little prince
Advanced locators - little princeAdvanced locators - little prince
Advanced locators - little princeCOMAQA.BY
 
Роман Сорока
Роман СорокаРоман Сорока
Роман СорокаCOMAQA.BY
 
многогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахмногогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахCOMAQA.BY
 
Page object with selenide
Page object with selenidePage object with selenide
Page object with selenideCOMAQA.BY
 
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...Applitools
 
Python test-automation
Python test-automationPython test-automation
Python test-automationCOMAQA.BY
 
Alternative ways of learning programming from scratch – first steps in automa...
Alternative ways of learning programming from scratch – first steps in automa...Alternative ways of learning programming from scratch – first steps in automa...
Alternative ways of learning programming from scratch – first steps in automa...COMAQA.BY
 
Некоторые физические законы в контексте автоматизации тестирования
Некоторые физические законы в контексте автоматизации тестированияНекоторые физические законы в контексте автоматизации тестирования
Некоторые физические законы в контексте автоматизации тестированияCOMAQA.BY
 
карта IT профессий
карта IT профессийкарта IT профессий
карта IT профессийCOMAQA.BY
 
низкоуровневое программирование сегодня новые стандарты с++, программирован...
низкоуровневое программирование сегодня   новые стандарты с++, программирован...низкоуровневое программирование сегодня   новые стандарты с++, программирован...
низкоуровневое программирование сегодня новые стандарты с++, программирован...COMAQA.BY
 
В топку Postman - пишем API автотесты в привычном стеке
В топку Postman - пишем API автотесты в привычном стекеВ топку Postman - пишем API автотесты в привычном стеке
В топку Postman - пишем API автотесты в привычном стекеCOMAQA.BY
 
Автоматизация тестирования API для начинающих
Автоматизация тестирования API для начинающихАвтоматизация тестирования API для начинающих
Автоматизация тестирования API для начинающихCOMAQA.BY
 
тестовые стратегии
тестовые стратегиитестовые стратегии
тестовые стратегииCOMAQA.BY
 
Using The Page Object Pattern
Using The Page Object PatternUsing The Page Object Pattern
Using The Page Object PatternDante Briones
 
Webium: Page Objects In Python (Eng)
Webium: Page Objects In Python (Eng)Webium: Page Objects In Python (Eng)
Webium: Page Objects In Python (Eng)Uladzimir Franskevich
 
Логические инструменты в арсенале тестировщика
Логические инструменты в арсенале тестировщикаЛогические инструменты в арсенале тестировщика
Логические инструменты в арсенале тестировщикаCOMAQA.BY
 

Viewers also liked (20)

A journey beyond the page object pattern
A journey beyond the page object patternA journey beyond the page object pattern
A journey beyond the page object pattern
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, java
 
Serenity and the Journey Pattern
Serenity and the Journey PatternSerenity and the Journey Pattern
Serenity and the Journey Pattern
 
От хаоса к автоматизации тестирования на примере Backend
От хаоса к автоматизации тестирования на примере BackendОт хаоса к автоматизации тестирования на примере Backend
От хаоса к автоматизации тестирования на примере Backend
 
Advanced locators - little prince
Advanced locators - little princeAdvanced locators - little prince
Advanced locators - little prince
 
Роман Сорока
Роман СорокаРоман Сорока
Роман Сорока
 
многогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахмногогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерах
 
Page object with selenide
Page object with selenidePage object with selenide
Page object with selenide
 
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...
*Webinar* Learn from the Experts: How to Boost Test Coverage with Automated V...
 
Python test-automation
Python test-automationPython test-automation
Python test-automation
 
Alternative ways of learning programming from scratch – first steps in automa...
Alternative ways of learning programming from scratch – first steps in automa...Alternative ways of learning programming from scratch – first steps in automa...
Alternative ways of learning programming from scratch – first steps in automa...
 
Некоторые физические законы в контексте автоматизации тестирования
Некоторые физические законы в контексте автоматизации тестированияНекоторые физические законы в контексте автоматизации тестирования
Некоторые физические законы в контексте автоматизации тестирования
 
карта IT профессий
карта IT профессийкарта IT профессий
карта IT профессий
 
низкоуровневое программирование сегодня новые стандарты с++, программирован...
низкоуровневое программирование сегодня   новые стандарты с++, программирован...низкоуровневое программирование сегодня   новые стандарты с++, программирован...
низкоуровневое программирование сегодня новые стандарты с++, программирован...
 
В топку Postman - пишем API автотесты в привычном стеке
В топку Postman - пишем API автотесты в привычном стекеВ топку Postman - пишем API автотесты в привычном стеке
В топку Postman - пишем API автотесты в привычном стеке
 
Автоматизация тестирования API для начинающих
Автоматизация тестирования API для начинающихАвтоматизация тестирования API для начинающих
Автоматизация тестирования API для начинающих
 
тестовые стратегии
тестовые стратегиитестовые стратегии
тестовые стратегии
 
Using The Page Object Pattern
Using The Page Object PatternUsing The Page Object Pattern
Using The Page Object Pattern
 
Webium: Page Objects In Python (Eng)
Webium: Page Objects In Python (Eng)Webium: Page Objects In Python (Eng)
Webium: Page Objects In Python (Eng)
 
Логические инструменты в арсенале тестировщика
Логические инструменты в арсенале тестировщикаЛогические инструменты в арсенале тестировщика
Логические инструменты в арсенале тестировщика
 

Similar to ScreenPlay Design Patterns for QA Automation

Test & behavior driven development
Test & behavior driven developmentTest & behavior driven development
Test & behavior driven developmentTristan Libersat
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETBen Hall
 
Sync Workitems between multiple Team Projects #vssatpn
Sync Workitems between multiple Team Projects #vssatpnSync Workitems between multiple Team Projects #vssatpn
Sync Workitems between multiple Team Projects #vssatpnLorenzo Barbieri
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum teamagilebin
 
You have Selenium... Now what?
You have Selenium... Now what?You have Selenium... Now what?
You have Selenium... Now what?Great Wide Open
 
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!Lorenzo Barbieri
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF SummitOrtus Solutions, Corp
 
AD208 - End to End Quality Processes for Top Notch XPages Apps
AD208 - End to End Quality Processes for Top Notch XPages AppsAD208 - End to End Quality Processes for Top Notch XPages Apps
AD208 - End to End Quality Processes for Top Notch XPages Appsbeglee
 
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Atlassian
 
Bridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous DeliveryBridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous Deliverymasoodjan
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Agile experiments in Machine Learning with F#
Agile experiments in Machine Learning with F#Agile experiments in Machine Learning with F#
Agile experiments in Machine Learning with F#J On The Beach
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Gianluca Padovani
 
Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Ortus Solutions, Corp
 
Agile Experiments in Machine Learning
Agile Experiments in Machine LearningAgile Experiments in Machine Learning
Agile Experiments in Machine Learningmathias-brandewinder
 
Selenium withnet
Selenium withnetSelenium withnet
Selenium withnetVlad Maniak
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistMark Fayngersh
 

Similar to ScreenPlay Design Patterns for QA Automation (20)

Test & behavior driven development
Test & behavior driven developmentTest & behavior driven development
Test & behavior driven development
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NET
 
Sync Workitems between multiple Team Projects #vssatpn
Sync Workitems between multiple Team Projects #vssatpnSync Workitems between multiple Team Projects #vssatpn
Sync Workitems between multiple Team Projects #vssatpn
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team
 
You have Selenium... Now what?
You have Selenium... Now what?You have Selenium... Now what?
You have Selenium... Now what?
 
Mock with Mockito
Mock with MockitoMock with Mockito
Mock with Mockito
 
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!
Azure DevOps Realtime Work Item Sync: the good, the bad, the ugly!
 
Dao example
Dao exampleDao example
Dao example
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
 
AD208 - End to End Quality Processes for Top Notch XPages Apps
AD208 - End to End Quality Processes for Top Notch XPages AppsAD208 - End to End Quality Processes for Top Notch XPages Apps
AD208 - End to End Quality Processes for Top Notch XPages Apps
 
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
 
Bridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous DeliveryBridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous Delivery
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Agile experiments in Machine Learning with F#
Agile experiments in Machine Learning with F#Agile experiments in Machine Learning with F#
Agile experiments in Machine Learning with F#
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)
 
Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018
 
Agile Experiments in Machine Learning
Agile Experiments in Machine LearningAgile Experiments in Machine Learning
Agile Experiments in Machine Learning
 
Real World Design Patterns
Real World Design PatternsReal World Design Patterns
Real World Design Patterns
 
Selenium withnet
Selenium withnetSelenium withnet
Selenium withnet
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
 

More from COMAQA.BY

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...COMAQA.BY
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...COMAQA.BY
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...COMAQA.BY
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьCOMAQA.BY
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...COMAQA.BY
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...COMAQA.BY
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...COMAQA.BY
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...COMAQA.BY
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.COMAQA.BY
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.COMAQA.BY
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...COMAQA.BY
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликтеCOMAQA.BY
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковCOMAQA.BY
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смертьCOMAQA.BY
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовCOMAQA.BY
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиCOMAQA.BY
 
Как стать синьором
Как стать синьоромКак стать синьором
Как стать синьоромCOMAQA.BY
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSourceCOMAQA.BY
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingCOMAQA.BY
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, javaCOMAQA.BY
 

More from COMAQA.BY (20)

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликте
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиков
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смерть
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестов
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачами
 
Как стать синьором
Как стать синьоромКак стать синьором
Как стать синьором
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSource
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testing
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, java
 

Recently uploaded

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 

Recently uploaded (20)

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 

ScreenPlay Design Patterns for QA Automation

  • 1. 1CONFIDENTIAL Screenplay Design Pattern for QA Automation ROMAN SOROKA December, 2016
  • 2. 2CONFIDENTIAL SCREENPLAY DESIGN PATTERN FOR QA AUTOMATION ROMAN SOROKA December 15, 2016
  • 3. 3CONFIDENTIAL ROMAN SOROKA • Lead test automation engineer in EPAM • Activist of COMAQA.by community • Over 7 years in IT. • Relocated to Minsk from Moscow • Roles in the career: developer, software engineer in test, QA lead, delivery manager.
  • 6. 6CONFIDENTIAL 2 1 3 Agenda SOLID Principles • Do you remember any development principles? • What is the best size for the class? • Which principles are violated by Page Object? Best practices • What is the right size for the class? • How to write easy to maintain classes? • How user stories and acceptance criteria can help? Screenplay Pattern • What is an actor-centric model? • How Screenplay pattern can help? • Will you change your approaches to GUI test automation?
  • 16. 16CONFIDENTIAL • There is a clean separation between test code and page specific code such as locators (or their use if you’re using a UI Map) and layout. • There is a single repository for the services or operations offered by the page rather than having these services scattered throughout the tests. • A page object is an object-oriented class that serves as an interface to a page of your AUT. • The tests then use the methods of this page object class whenever they need to interact with the UI of that page. • The benefit is that if the UI changes for the page, the tests themselves don’t need to change, only the code within the page object needs to change. Page object pattern Page Object advantages Page Object ideas
  • 18. 18CONFIDENTIAL Page Element Action SingleApplicationPage Section1Base Section2Base FooterBase Actions1 UserData1 Section1Xyz Section2Xyz Footer1 Actions2 Section1Qwe Section2Qwe Single page application Data UserData2 Actions3
  • 20. 20CONFIDENTIAL Does size matter? • "The first rule of classes is that they should be small. The second rule of classes is that they should be smaller than that.“ • Use your head as a benchmark. What is the right size for java classes?
  • 21. 21CONFIDENTIAL Does size matter? • We want our systems to be composed of many small classes, not a few large ones. Each small class encapsulates a single responsibility, has a single reason to change, and collaborates with a few others to achieve the desired system behaviors.
  • 24. 24CONFIDENTIAL User stories and acceptance criteria
  • 25. 25CONFIDENTIAL • The Screenplay Pattern (aka Journey) is an approach to writing high quality automated acceptance tests based on good software engineering principles such as • the Single Responsibility Principle • the Open-Closed Principle – It favors composition over inheritance. – It employs thinking from Domain Driven Design to reflect the domain of performing acceptance tests. – It encourages good testing habits and well- designed test suites that are easy to read, easy to maintain and easy to extend. – It enables teams to write more robust and more reliable automated tests more effectively. Screenplay Design Pattern
  • 26. 26CONFIDENTIAL Application under test and tools • The application we will be testing is the AngularJS implementation of the well-known TodoMVC project. • For simplicity, we will be using Serenity BDD with Junit. • Hamcrest matcher. • And the long time promised Screenplay pattern.
  • 31. 31CONFIDENTIAL The exemplary acceptance criterion Now suppose we are implementing the “Add new todo items” feature. This feature could have an acceptance criterion along the lines of “Add a new todo item”. If we were testing these scenarios manually, it might look like this: Add a new todo item • Start with an empty todo list • Add an item called ‘Buy some milk’ • The ‘Buy some milk’ item should appear in the todo list
  • 32. 32CONFIDENTIAL The example acceptance criterion One of the big selling points of the Screenplay Pattern is that it lets you build up a readable API of methods and objects to express your acceptance criteria in business terms. For example, using the Screenplay Pattern, we could automate the scenario shown above very naturally like this: @Test public void should_be_able_to_add_a_todo_item() { givenThat(james).wasAbleTo(Start.withAnEmptyTodoList()); when(james).attemptsTo(AddATodoItem.called("Buy some milk")); then(james).should(seeThat(TheItems.displayed(), hasItem("Buy some milk"))) }
  • 34. 34CONFIDENTIAL User Experience (UX) Design In User Experience (UX) Design, we break down the way a user interacts with an application into goals (scenario titles), tasks (top-level of abstraction in the scenario) and actions (the lowest level of abstraction, below the tasks). Layers of abstraction • The goal describes the ‘why’ of the scenario in terms of what the user is trying to achieve in business terms. • The tasks describe what the user will do as high-level steps required to achieve this goal. • The actions say how a user interacts with the system to perform a particular task, such as by clicking on a button or entering a value into a field. The Screenplay Pattern encourages strong layers of abstraction
  • 35. 35CONFIDENTIAL The Screenplay Pattern uses an actor-centric model
  • 36. 36CONFIDENTIAL • Actors need to be able to do things to perform their assigned tasks. So we give our actors “abilities”, a bit like the superpowers of a super- hero, if somewhat more mundane. If this is a web test, for example, we need James to be able to browse the web using a browser. – james.can(BrowseTheWeb.with(hisBrowser)); • To make it clear that this is a precondition for the test (and could very well go in a JUnit @Before method), we can use the syntactic sugar method givenThat(): – givenThat(james).can(BrowseTheWeb.with(hi sBrowser)); Actors have abilities
  • 37. 37CONFIDENTIAL • An actor needs to perform a number of tasks to achieve a business goal. A fairly typical example of a task is “adding a todo item”, which we could write as follows: – james.attemptsTo(AddATodoItem.called("Buy some milk")) • Or, if the task is a precondition, rather than the main subject of the test, we could write something like this: – james.wasAbleTo(AddATodoItem.called("Buy some milk")) Actors perform tasks
  • 38. 38CONFIDENTIAL • The actor invokes the performAs() method on a sequence of tasks • Tasks are just objects that implement the Task interface, and need to implement the performAs(actor) method. • You can think of any Task class as basically a performAs() method alongside a supporting cast of helper methods. Actors perform tasks
  • 39. 39CONFIDENTIAL Serenity task class example public class AddATodoItem implements Task { private final String thingToDo; protected AddATodoItem(String thingToDo) { this.thingToDo = thingToDo; } public static AddATodoItem called(String thingToDo) { return Instrumented.instanceOf(AddATodoItem.class). withProperties(thingToDo); } @Step("{0} adds a todo item called #thingToDo") public <T extends Actor> void performAs(T actor) { actor.attemptsTo( Enter.theValue(thingToDo) .into(NewTodoForm.NEW_TODO_FIELD) .thenHit(RETURN) ); } } james.wasAbleTo(AddATodoItem.called("Buy some milk"));
  • 40. 40CONFIDENTIAL • To get the job done, a high-level business task will usually need to call either lower level business tasks or actions that interact more directly with the application. In practice, this means that the performAs() method of a task typically executes other, lower level tasks or interacts with the application in some other way. For example, adding a todo item requires two UI actions: – Enter the todo text in the text field – Press Return Task decomposition
  • 41. 41CONFIDENTIAL Tasks can be used as building blocks by other tasks public class AddTodoItems implements Task { private final List<String> todos; protected AddTodoItems(List<String> items) { this.todos = ImmutableList.copyOf(items); } @Step("{0} adds the todo items called #todos") public <T extends Actor> void performAs(T actor) { todos.forEach( todo -> actor.attemptsTo( AddATodoItem.called(todo) ) ); } public static AddTodoItems called(String... items) { return Instrumented.instanceOf(AddTodoItems.class). withProperties(asList(items)); } } givenThat(james).wasAbleTo(AddTodoItems.called("Walk the dog", "Put out the garbage"));
  • 42. 42CONFIDENTIAL UI elements are targets In the Serenity Screenplay implementation, we use a special Target class to identify elements using (by default) either CSS or XPATH. The Target object associates a WebDriver selector with a human- readable label that appears in the test reports to make the reports more readable. You define a Target object as shown here: Target WHAT_NEEDS_TO_BE_DONE = Target.the( "'What needs to be done?' field").locatedBy("#new- todo") ;
  • 43. 43CONFIDENTIAL Page object data class public class ToDoList { public static Target WHAT_NEEDS_TO_BE_DONE = Target.the( "'What needs to be done?' field").locatedBy("#new-todo"); public static Target ITEMS = Target.the( "List of todo items").locatedBy(".view label"); public static Target ITEMS_LEFT = Target.the( "Count of items left").locatedBy("#todo-count strong"); public static Target TOGGLE_ALL = Target.the( "Toggle all items link").locatedBy("#toggle-all"); public static Target CLEAR_COMPLETED = Target.the( "Clear completed link").locatedBy("#clear- completed"); public static Target FILTER = Target.the( "filter").locatedBy("//*[@id='filters']//a[.='{0}']"); public static Target SELECTED_FILTER = Target.the( "selected filter").locatedBy("#filters li .selected"); }
  • 44. 44CONFIDENTIAL A typical automated acceptance test has three parts: 1. Set up some test data and/or get the application into a known state 2. Perform some action 3. Compare the new application state with what is expected. From a testing perspective, the third step is where the real value lies – this is where we check that the application does what it is supposed to do. Actors can ask questions about the state of the application
  • 45. 45CONFIDENTIAL Actors use their abilities to interact with the system • The Todo application has a counter in the bottom left hand corner indicating the remaining number of items. • We will use question object to check the status of the displayed item. • The test needs to check that the number of remaining items is correct. What is the right size for java classes?
  • 46. 46CONFIDENTIAL Test itself @Test public void should_see_the_number_of_todos_decrease_when_an_item_is_completed() { givenThat(james).wasAbleTo(Start.withATodoListContaining( "Walk the dog", "Put out the garbage")); when(james).attemptsTo( CompleteItem.called("Walk the dog") ); then(james).should(seeThat(TheItems.leftCount(), is(1))); } The test needs to check that the number of remaining items (as indicated by the “items left” counter) is 1.
  • 47. 47CONFIDENTIAL Auxiliary code The static TheItems.leftCount() method is a simple factory method that returns a new instance of the ItemsLeftCounter class: public class TheItems { public static Question<List<String>> displayed() { return new DisplayedItems(); } public static Question<Integer> leftToDoCount() { return new ItemsLeftCounter(); } } This serves simply to make the code read in a fluent fashion.
  • 48. 48CONFIDENTIAL Question objects then(james).should(seeThat(TheItems.displayed(), hasItem("Buy some milk"))); This code checks a value retrieved from the application (the items displayed on the screen) against an expected value (described by a Hamcrest expression). However, rather than passing an actual value, we pass a Question object. The role of a Question object is to answer a precise question about the state of the application, from the point of view of the actor, and typically using the abilities of the actor to do so. Questions are rendered in human-readable form in the reports:
  • 49. 49CONFIDENTIAL The Question object Question objects are similar to Task and Action objects. However, instead of the performAs() used for Tasks and Actions, a Question class needs to implement the answeredBy(actor) method, and return a result of a specified type. public class ItemsLeftCounter implements Question<Integer> { @Override public Integer answeredBy(Actor actor) { return Text.of(TodoCounter.ITEM_COUNT) .viewedBy(actor) .asInteger(); } } The answeredBy() method uses the Text interaction class to retrieve the text of the remaining item count and to convert it to an integer: public static Target ITEMS_LEFT = Target.the("Count of items left"). locatedBy("#todo- count strong");
  • 50. 50CONFIDENTIAL • Like many good software development practices, the Screenplay Pattern takes some discipline to start with. Some care is initially required to design a readable, DSL-like API made up of well-organised tasks, actions and questions. Screenplay is finished
  • 51. 51CONFIDENTIAL Conclusion The Screenplay Pattern is an approach to writing automated acceptance tests founded on good software engineering principles that makes it easier to write clean, readable, scalable, and highly maintainable test code. It is one possibile outcome of the merciless refactoring of the Page Object pattern towards SOLID principles. The new support for the Screenplay Pattern in Serenity BDD opens a number of exciting possibilities. In particular: • The declarative writing style encouraged by the Screenplay Pattern makes it much simpler to write code that is easier to understand and maintain; • Task, Action and Question classes tend to be more flexible, reusable and readable; • Separating the abilities of an actor adds a great deal of flexibility. For example, it is very easy to write a test with several actors using different browser instances.
  • 52. 52CONFIDENTIAL Grattitude Antony Marcano Founding Consultant is best known in the community for his thinking on BDD, user stories, testing and writing fluent APIs & DSLs in Ruby, Java and more John Ferguson Smart Mentor | Author | Speaker is an experienced author, speaker and trainer specialising in Agile Delivery Practices, currently based in London. Andy Palmer Mentor | Team management | Speaker is co-creator of the ground-breaking PairWith.us screencasts, regular speaker at international conferences; Andy has shortened the delivery cycles of projects across numerous organisations with his expertise in taking complex technology problems and simplifying them to their essence. Jan Molak Extreme Programming and Continuous Delivery Consultant is a full-stack developer and coach who spent last 12 years building and shipping software ranging from award-winning AAA video games and MMO RPGs through websites and webapps to search engines, complex event processing and financial systems.
  • 53. 53CONFIDENTIAL The Screenplay Pattern encourages strong layers of abstraction Designing Usable Apps: An agile approach to User Experience Design by Kevin Matz1 “A BIT OF UCD FOR BDD & ATDD: GOALS -> TASKS -> ACTIONS” – Antony Marcano,2 “A journey beyond the page object pattern” - Antony Marcano, Jan Molak, Kostas Mamalis3 JNarrate: The original reference implementation of the Screenplay Pattern4 The Command Pattern: “Design Patterns: Elements of Reusable Object-Oriented Software”- Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides 5 TodoMVC: The Todo application tested in this article6

Editor's Notes

  1. Недавно в епам и был уж интересный опыт на проекте В целом в ИТ я давно уже тружусь Прогал, писал фреймворки, лидил, выстраивал процессы. Переехал из Москвы в Минск.
  2. Связаться со мной можно через любые средства связи, но начните с моей рабочей почты, пожалуйста.
  3. I’m going to tell you the story for about 40 minutes. Don’t raise hands or wait for the Q&A session. Ask in chat as soon as question comes to your mind. Sometimes I’ll ask you a question - you’ll see a poll slide. Don’t hesitate to provide your opinion. At the end of webinar we’ll have Q&A session and I’ll try to answer your questions and discuss your answers. Hopefully the recording of session will be available in EPAM repository soon.
  4. http://todomvc.com/examples/angularjs/#/
  5. http://todomvc.com/examples/angularjs/#/