SlideShare a Scribd company logo
UI Automation at Scale
Augmented Driver
fernando@split.io
A little bit about me
● Started working @Google in late 2006.
A little bit about me
● Started working @Google in late 2006.
● Selenium/Webdriver started becoming a “thing” sometime in 2007.
A little bit about me
● In 2010 I joined Medallia.
A little bit about me
● In 2010 I joined Medallia.
● Super excited about building UI automation from scratch.
A little bit about me
● In 2014 moved to RelateIQ (Now SalesforceIQ)
A little bit about me
● In 2014 moved to RelateIQ (Now SalesforceIQ)
● Again a Start Up, being part of a small team that wanted to have a big
impact in the company.
A little bit about me
● Finally a couple of months ago I joined Split.IO.
A little bit about me
● Finally a couple of months ago I joined Split.IO
● Being one of the first Software Engineers, again with the role of shipping
code as fast as we can with the best Customer Experience as we can.
Episode I
WebDriver tests are inherently slow. If you want throughput, you need to
focus on parallelism, leading us to the first lesson in this saga.
Episode I: Data Independent Tests
If each test creates its own data that is not shared with anyone else, then all of
your tests can run in parallel.
To the code!
@Path(“/test”)
public class TestResource {
@Post
@Path(“create”)
public Response create(String uniqueUser) {
If (isProd()) { throw new NotAllowedException(“NOT ALLOWED”); }
//… create unique user, organization, etc...
//...
}
@Post
@Path(“clean”)
public Response clean(String uniqueUser) {
If (isProd()) { throw new NotAllowedException(“NOT ALLOWED”);}
//…clean unique user, organization, etc...
//...
}
}
To the code!
public class DataCreatorRule implements TestRule {
public Statement apply(Statement statement, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
String uniqueUser = "uniqueuser";
client
.test()
.create(uniqueUser);
statement.evaluate();
client
.test()
.clean(uniqueUser);
}
}
}
}
To the code!
public abstract class BaseTestCase {
@Rule
public DataCreatorRule dataCreatorRule =new DataCreatorRule();
}
Alternatives
● @BeforeMethod and @AfterMethod in TestNG.
● @Before and @After in JUnit < 4.
● beforeEach() and afterEach() in Jasmine JS.
● setUp(self) and tearDown(self) in Python.
Episode I Code Example
Episode II
Throughput is achieved with Parallelism. With that in mind, you need to build
reliable tests in all possible Environments.
Local != Staging != SauceLabs.
This leads to the second lesson...
Episode II: Slow and Steady Wins the Race
Failures are caused by elements not showing up in time. In general, when the
element has an unexpected transient state when the action is being
performed.
To the code!
private final Webdriver driver;
public void ohWhy(By identifier) {
Thread.sleep(3000);
WebElement element = driver.findElement(identifier);
element.click();
}
To the code!
private final Webdriver driver;
public void better(By identifier) {
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(identifier);
element.click();
}
To the code!
private final AugmentedWebDriver driver;
public void augmentedWay(By identifier) {
driver
.augmented()
.findElementClickable(identifier)
.click();
}
More...
driver.augmented().findElementVisible(id);
driver.augmented().findElementsVisible(id).get(0)
.augmented().findElementClickable(id2).click();
driver().augmented().clickAndSendKeys(id,“text”);
driver().augmented().swipeDown(id);
Episode II Code Example
Episode III.
● Your tests can run in parallel...
● You can wait until elements are on a desired state...
Time to encapsulate you tests in business logic to maximize reusability and
maintainability.
This leads to the third lesson...
Episode III: Follow the Page Object Model
Need to encapsulate the logic of the UI areas that your tests performs actions,
for maintainability and for many other reasons.
To the code!
public class MainPage extends WebPageObject {
@Override
public Optional<By> visibleBy() {
return Optional.of(Bys.INPUT);
}
public static class Bys {
public static class By INPUT = By.id("searchInput");
}
}
To the Code!
public class BaseCase extends AugmentedWebTestCase {
public MainPage mainPage() {
driver().get(“https://www.wikipedia.org”);
Return get(MainPage.class);
}
}
Episode III Code Example
Episode IV
● Your tests can run in parallel...
● You can wait until elements are on a desired state...
● You have your framework encapsulated on business logic…
The next level is to wait and expect certain business logic to take place when
actions are performed.
That leads to…
Episode IV: Wait and Expect for business logic
This is an extension of the Episode 2 but at a much higher level that each app
defines.
Episode IV: Wait and Expect for business logic
Since now we have Page Objects that encapsulate business logic, we can
perform “waiters” that will wait until certain condition is fulfilled.
To the Code!
public class MainPage extends WebPageObject {
public int numberOfSuggestions() {
return driver()
.augmented()
.findElementSSSSVisible(Bys.SUGGESTION)
.size();
}
public static class Bys {
public static final By SUGGESTION = By.className("suggestion-link");
}
}
To the Code!
@Test
public void test() {
mainPage
.search("WebDriver");
waiter().waitUntil(mainPage, page -> page.numberOfSuggestions() > 3);
}
Episode IV Code Example
Episode V
● Your tests can run in parallel...
● You can wait until elements are on a desired state...
● Your business logic is encapsulated...
● You can wait for business logic to be fulfilled…
Now each test has maintainability and reliability in mind. It’s time to
consolidate each individual piece into something that the rest of the team can
easily digest it.
Episode V: Reporting Reporting Reporting
This has one basic lesson learned:
Episode V
DON’T
Episode V Code Example
Episode VI
● Your tests can run in parallel...
● You can wait until elements are on a desired state...
● Your business logic is encapsulated...
● You can wait for business logic to be fulfilled…
● You have a way to have visibility and transparency
Finally the last step is to provide easy configuration and integrations so it can
be plugged into CI systems
Episode VI: Integrations and Easy Configuration
It should be easy and straightforward to integrate into different tools.
Episode VI Code Example
Thanks!
Augmented Driver: https://github.com/relateiq/AugmentedDriver
Split.IO: http://www.split.io/
Special offer by Applitools:
50-page guidebook to visual testing (including tips, tricks and code examples),
written by Selenium expert Dave Haeffner.
Claim your free copy by sending an email to webinars@applitools.com

More Related Content

What's hot (20)

PDF
Practical Tips & Tricks for Selenium Test Automation - Dave Haeffner
Applitools
 
PDF
Web UI test automation instruments
Artem Nagornyi
 
PPTX
Selenium Design Patterns
Liraz Shay
 
PDF
Practical Tips & Tricks for Selenium Test Automation
Sauce Labs
 
PDF
AngularJS and Protractor
Filipe Falcão
 
PPTX
BDD with SpecFlow and Selenium
Liraz Shay
 
PPTX
Marcin Wasilczyk - Page objects with selenium
Trójmiejska Grupa Testerska
 
PDF
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Joe Ferguson
 
PDF
Codeception
Jonathan Lau
 
DOCX
Automation Frame works Instruction Sheet
vodQA
 
PPTX
Automated UI testing done right (DDDSydney)
Mehdi Khalili
 
PPT
Introduction to Selenium
rohitnayak
 
PDF
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
PDF
Codeception introduction and use in Yii
IlPeach
 
PDF
Selenium Basics Tutorial
Clever Moe
 
PDF
Selenium 2 - PyCon 2011
hugs
 
PPTX
Automated Testing using JavaScript
Simon Guest
 
PPTX
Automated UI Testing Done Right (QMSDNUG)
Mehdi Khalili
 
PDF
Acceptance & Functional Testing with Codeception - Devspace 2015
Joe Ferguson
 
DOCX
Selenium WebDriver FAQ's
Praveen Gorantla
 
Practical Tips & Tricks for Selenium Test Automation - Dave Haeffner
Applitools
 
Web UI test automation instruments
Artem Nagornyi
 
Selenium Design Patterns
Liraz Shay
 
Practical Tips & Tricks for Selenium Test Automation
Sauce Labs
 
AngularJS and Protractor
Filipe Falcão
 
BDD with SpecFlow and Selenium
Liraz Shay
 
Marcin Wasilczyk - Page objects with selenium
Trójmiejska Grupa Testerska
 
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Joe Ferguson
 
Codeception
Jonathan Lau
 
Automation Frame works Instruction Sheet
vodQA
 
Automated UI testing done right (DDDSydney)
Mehdi Khalili
 
Introduction to Selenium
rohitnayak
 
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
Codeception introduction and use in Yii
IlPeach
 
Selenium Basics Tutorial
Clever Moe
 
Selenium 2 - PyCon 2011
hugs
 
Automated Testing using JavaScript
Simon Guest
 
Automated UI Testing Done Right (QMSDNUG)
Mehdi Khalili
 
Acceptance & Functional Testing with Codeception - Devspace 2015
Joe Ferguson
 
Selenium WebDriver FAQ's
Praveen Gorantla
 

Similar to Mastering UI automation at Scale: Key Lessons and Best Practices (By Fernando Martin) (20)

PPTX
Designing for the internet - Page Objects for the Real World
Qualitest
 
PDF
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
PPTX
Designing Self-maintaining UI Tests for Web Applications
TechWell
 
PDF
Automation Abstractions: Page Objects and Beyond
TechWell
 
PPTX
Web UI Tests: Introduce UI tests using Selenium
Peyman Fakharian
 
PDF
Create an architecture for web test automation
Elias Nogueira
 
PPTX
Testing ASP.NET - Progressive.NET
Ben Hall
 
PDF
My Test Automation Journey
Vaidas Pilkauskas
 
PDF
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Gáspár Nagy
 
PDF
Web ui testing
Radim Pavlicek
 
PPT
selenium.ppt
rajnexient
 
PPT
selenium.ppt
ssuser7b4894
 
PPT
selenium.ppt
AmenSheikh
 
PDF
Ui automation
test test
 
PDF
Change Tyres In A Moving Car - Make Functional Test Automation Effective Keynote
Anand Bagmar
 
PPT
Selenium
Sun Technlogies
 
PPTX
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
hemasubbu08
 
PDF
Test automation & Seleniun by oren rubin
Oren Rubin
 
PDF
Automated acceptance test
Bryan Liu
 
PDF
Automation Abstraction Layers: Page Objects and Beyond
Alan Richardson
 
Designing for the internet - Page Objects for the Real World
Qualitest
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
Designing Self-maintaining UI Tests for Web Applications
TechWell
 
Automation Abstractions: Page Objects and Beyond
TechWell
 
Web UI Tests: Introduce UI tests using Selenium
Peyman Fakharian
 
Create an architecture for web test automation
Elias Nogueira
 
Testing ASP.NET - Progressive.NET
Ben Hall
 
My Test Automation Journey
Vaidas Pilkauskas
 
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Gáspár Nagy
 
Web ui testing
Radim Pavlicek
 
selenium.ppt
rajnexient
 
selenium.ppt
ssuser7b4894
 
selenium.ppt
AmenSheikh
 
Ui automation
test test
 
Change Tyres In A Moving Car - Make Functional Test Automation Effective Keynote
Anand Bagmar
 
Selenium
Sun Technlogies
 
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
hemasubbu08
 
Test automation & Seleniun by oren rubin
Oren Rubin
 
Automated acceptance test
Bryan Liu
 
Automation Abstraction Layers: Page Objects and Beyond
Alan Richardson
 
Ad

More from Applitools (20)

PDF
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
PDF
Creating Automated Tests with AI - Cory House - Applitools.pdf
Applitools
 
PDF
Navigating EAA Compliance in Testing.pdf
Applitools
 
PDF
AI-Assisted, AI-Augmented & Autonomous Testing
Applitools
 
PDF
Code or No-Code Tests: Why Top Teams Choose Both
Applitools
 
PDF
The ROI of AI-Powered Testing, presented by Applitools
Applitools
 
PDF
Building No-code Autonomous E2E Tests_Applitools.pdf
Applitools
 
PDF
Conquer 6 Testing Challenges_Applitools.pdf
Applitools
 
PDF
Autonomous End-to-End Testing for Online Banking Applications Presented with ...
Applitools
 
PDF
Playwright Visual Testing Best Practices, presented by Applitools
Applitools
 
PDF
Cross-Browser and Cross-Device Testing | Applitools in Action
Applitools
 
PDF
Advanced Debugging Techniques | Applitools in Action.pdf
Applitools
 
PDF
AI-Powered Testing Strategies for the Seasonal Shopping Surge.pdf
Applitools
 
PDF
Test Automation for Dynamic Applications _ Applitools in Action.pdf
Applitools
 
PDF
Proven Approaches to AI-Powered E2E Testing.pdf
Applitools
 
PDF
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools
 
PDF
Building the Ideal CI-CD Pipeline_ Achieving Visual Perfection
Applitools
 
PDF
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Applitools
 
PDF
Streamlining Your Tech Stack: A Blueprint for Enhanced Efficiency and Coverag...
Applitools
 
PDF
Visual AI for eCommerce: Improving Conversions with a Flawless UI
Applitools
 
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Creating Automated Tests with AI - Cory House - Applitools.pdf
Applitools
 
Navigating EAA Compliance in Testing.pdf
Applitools
 
AI-Assisted, AI-Augmented & Autonomous Testing
Applitools
 
Code or No-Code Tests: Why Top Teams Choose Both
Applitools
 
The ROI of AI-Powered Testing, presented by Applitools
Applitools
 
Building No-code Autonomous E2E Tests_Applitools.pdf
Applitools
 
Conquer 6 Testing Challenges_Applitools.pdf
Applitools
 
Autonomous End-to-End Testing for Online Banking Applications Presented with ...
Applitools
 
Playwright Visual Testing Best Practices, presented by Applitools
Applitools
 
Cross-Browser and Cross-Device Testing | Applitools in Action
Applitools
 
Advanced Debugging Techniques | Applitools in Action.pdf
Applitools
 
AI-Powered Testing Strategies for the Seasonal Shopping Surge.pdf
Applitools
 
Test Automation for Dynamic Applications _ Applitools in Action.pdf
Applitools
 
Proven Approaches to AI-Powered E2E Testing.pdf
Applitools
 
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools
 
Building the Ideal CI-CD Pipeline_ Achieving Visual Perfection
Applitools
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Applitools
 
Streamlining Your Tech Stack: A Blueprint for Enhanced Efficiency and Coverag...
Applitools
 
Visual AI for eCommerce: Improving Conversions with a Flawless UI
Applitools
 
Ad

Recently uploaded (20)

PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Biography of Daniel Podor.pdf
Daniel Podor
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 

Mastering UI automation at Scale: Key Lessons and Best Practices (By Fernando Martin)

  • 1. UI Automation at Scale Augmented Driver [email protected]
  • 2. A little bit about me ● Started working @Google in late 2006.
  • 3. A little bit about me ● Started working @Google in late 2006. ● Selenium/Webdriver started becoming a “thing” sometime in 2007.
  • 4. A little bit about me ● In 2010 I joined Medallia.
  • 5. A little bit about me ● In 2010 I joined Medallia. ● Super excited about building UI automation from scratch.
  • 6. A little bit about me ● In 2014 moved to RelateIQ (Now SalesforceIQ)
  • 7. A little bit about me ● In 2014 moved to RelateIQ (Now SalesforceIQ) ● Again a Start Up, being part of a small team that wanted to have a big impact in the company.
  • 8. A little bit about me ● Finally a couple of months ago I joined Split.IO.
  • 9. A little bit about me ● Finally a couple of months ago I joined Split.IO ● Being one of the first Software Engineers, again with the role of shipping code as fast as we can with the best Customer Experience as we can.
  • 10. Episode I WebDriver tests are inherently slow. If you want throughput, you need to focus on parallelism, leading us to the first lesson in this saga.
  • 11. Episode I: Data Independent Tests If each test creates its own data that is not shared with anyone else, then all of your tests can run in parallel.
  • 12. To the code! @Path(“/test”) public class TestResource { @Post @Path(“create”) public Response create(String uniqueUser) { If (isProd()) { throw new NotAllowedException(“NOT ALLOWED”); } //… create unique user, organization, etc... //... } @Post @Path(“clean”) public Response clean(String uniqueUser) { If (isProd()) { throw new NotAllowedException(“NOT ALLOWED”);} //…clean unique user, organization, etc... //... } }
  • 13. To the code! public class DataCreatorRule implements TestRule { public Statement apply(Statement statement, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { String uniqueUser = "uniqueuser"; client .test() .create(uniqueUser); statement.evaluate(); client .test() .clean(uniqueUser); } } } }
  • 14. To the code! public abstract class BaseTestCase { @Rule public DataCreatorRule dataCreatorRule =new DataCreatorRule(); }
  • 15. Alternatives ● @BeforeMethod and @AfterMethod in TestNG. ● @Before and @After in JUnit < 4. ● beforeEach() and afterEach() in Jasmine JS. ● setUp(self) and tearDown(self) in Python.
  • 16. Episode I Code Example
  • 17. Episode II Throughput is achieved with Parallelism. With that in mind, you need to build reliable tests in all possible Environments. Local != Staging != SauceLabs. This leads to the second lesson...
  • 18. Episode II: Slow and Steady Wins the Race Failures are caused by elements not showing up in time. In general, when the element has an unexpected transient state when the action is being performed.
  • 19. To the code! private final Webdriver driver; public void ohWhy(By identifier) { Thread.sleep(3000); WebElement element = driver.findElement(identifier); element.click(); }
  • 20. To the code! private final Webdriver driver; public void better(By identifier) { WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(identifier); element.click(); }
  • 21. To the code! private final AugmentedWebDriver driver; public void augmentedWay(By identifier) { driver .augmented() .findElementClickable(identifier) .click(); }
  • 23. Episode II Code Example
  • 24. Episode III. ● Your tests can run in parallel... ● You can wait until elements are on a desired state... Time to encapsulate you tests in business logic to maximize reusability and maintainability. This leads to the third lesson...
  • 25. Episode III: Follow the Page Object Model Need to encapsulate the logic of the UI areas that your tests performs actions, for maintainability and for many other reasons.
  • 26. To the code! public class MainPage extends WebPageObject { @Override public Optional<By> visibleBy() { return Optional.of(Bys.INPUT); } public static class Bys { public static class By INPUT = By.id("searchInput"); } }
  • 27. To the Code! public class BaseCase extends AugmentedWebTestCase { public MainPage mainPage() { driver().get(“https://www.wikipedia.org”); Return get(MainPage.class); } }
  • 28. Episode III Code Example
  • 29. Episode IV ● Your tests can run in parallel... ● You can wait until elements are on a desired state... ● You have your framework encapsulated on business logic… The next level is to wait and expect certain business logic to take place when actions are performed. That leads to…
  • 30. Episode IV: Wait and Expect for business logic This is an extension of the Episode 2 but at a much higher level that each app defines.
  • 31. Episode IV: Wait and Expect for business logic Since now we have Page Objects that encapsulate business logic, we can perform “waiters” that will wait until certain condition is fulfilled.
  • 32. To the Code! public class MainPage extends WebPageObject { public int numberOfSuggestions() { return driver() .augmented() .findElementSSSSVisible(Bys.SUGGESTION) .size(); } public static class Bys { public static final By SUGGESTION = By.className("suggestion-link"); } }
  • 33. To the Code! @Test public void test() { mainPage .search("WebDriver"); waiter().waitUntil(mainPage, page -> page.numberOfSuggestions() > 3); }
  • 34. Episode IV Code Example
  • 35. Episode V ● Your tests can run in parallel... ● You can wait until elements are on a desired state... ● Your business logic is encapsulated... ● You can wait for business logic to be fulfilled… Now each test has maintainability and reliability in mind. It’s time to consolidate each individual piece into something that the rest of the team can easily digest it.
  • 36. Episode V: Reporting Reporting Reporting This has one basic lesson learned:
  • 38. Episode V Code Example
  • 39. Episode VI ● Your tests can run in parallel... ● You can wait until elements are on a desired state... ● Your business logic is encapsulated... ● You can wait for business logic to be fulfilled… ● You have a way to have visibility and transparency Finally the last step is to provide easy configuration and integrations so it can be plugged into CI systems
  • 40. Episode VI: Integrations and Easy Configuration It should be easy and straightforward to integrate into different tools.
  • 41. Episode VI Code Example
  • 42. Thanks! Augmented Driver: https://github.com/relateiq/AugmentedDriver Split.IO: http://www.split.io/ Special offer by Applitools: 50-page guidebook to visual testing (including tips, tricks and code examples), written by Selenium expert Dave Haeffner. Claim your free copy by sending an email to [email protected]