SlideShare a Scribd company logo
1 of 25
WRITING
WELL-ABSTRACTED
SELF-TESTING
AUTOMATION
ON TOP OF JELL-O®
DAN CUELLAR
LEAD SOFTWARE ENGINEER
ZOOSK - QA TEAM
TERMINOLOGY
Test or Automation Script
a series of steps and expected output
Hook or Element
a means of identifying a piece of UI (think the By class in
WebDriver)
Controller
a program which executes basic commands (think WebDriver or
SeleniumRC Server)
PHILOSOPHY
• Selenium is a controller program, it exists to perform actions
on a platform (web browsers)
• Click a link
• Read some text
• Libraries exist to coordinate these small actions into larger
logical actions on a particular platform
• Sign In
• Send A Message
• Get All Error Messages
• Interfaces exist to remove the platform from the context of
libraries
• Automation scripts should coordinate the highest level of
abstraction whenever possible to maintain agility and
robustness
A BIT ABOUT ZOOSK
• Zoosk is a romantic social network with tens of millions of users that
operates in 25 languages and in over 70 countries.
• Products include:
• web site
• mobile web site
• Facebook app
• iPhone app
• iPad app
• Android app
• Adobe Air app
• The development pace is rapid, features are churned out in around 2
weeks time (including testing)
• Product management is always running experiments and adjusting
plans based on data from instrumentation
• Developer to quality assurance ratio hovers somewhere around 10:1
SO WHAT DO YOU
MEAN BY JELL-O®
Jell-O [jel-oh]
Site wide A/B tests where ½ of users will see a complete site
redesign and the other ½ will use the site as it was before.
Facebook app users can also split between different A and B
designs at times.
Each A & B may have its own JS, CSS, and business logic to go
along with it.
Not to mention that different versions of the API were being used
by the web, Facebook app, and mobile apps.
All the while, different features were being enabled and disabled
for different subsets of the A/B test groups
WHAT CAN GO WRONG?
• General
• Not enough information is retrieved to reproduce the failure
• Elements
• The type can change (e.g. dropdown becomes a checkbox)
• An element can change location
• An element can have multiple ways of identifying itself depending
on an A/B test
• Business Logic
• Logic can change for one platform
• Logic can change for some users and not others (A/B test)
• Logic can change for all platforms
HOW DO WE COMBAT THESE
PROBLEMS?
• General
• Not enough information is retrieved to reproduce the failure
• Separate test actions from controller code, add abundant
logging, and unify the patterns by which common
operations are accomplished (e.g. selecting from
dropdown) Don’t access selenium directly in any scripts.
Create a wrapper that logs everything and performs basic
checks. (e.g. is the choice available on the dropdown)
• If libraries are used then you can log just about everything
possible every time without having to re-paste all the
logging code
HOW DO WE COMBAT THESE
PROBLEMS? (CONT.)
• Elements
• The type can change
• Abstracting away all uses of the item into a library
• An element can change location
• Centralize all hooks into the UI, you can change it once
and it will be fixed for all
• Using reflection, you can verify that all of your hooks are
functional
• An element can have multiple ways of identifying itself
depending on an A/B test
• ID’s are great, but you can also use an XPath Or
expression in your centralized hook
HOW DO WE COMBAT THESE
PROBLEMS? (CONT.)
• Business Logic
• Logic can change for one platform
• Update the library for that platform
• Logic can change for some users and not others (A/B test)
• Detect the A/B test in the library
• Logic can change for all platforms
• Generic Libraries or test scripts which coordinate platform
specific libraries are a great place to address this
HOW DO YOU DEAL
WITH THAT AGAIN?
• Separate logical actions From calls to controller (in this case
Selenium) code into libraries
• Centralize your site model and logic, so that all automation
runs through one place. When you have to fix something, you
can fix it once for everything.
• Write code that can test the test automation. Investigating test
script failures can be costly, but if you test code can test itself
you will be able to pick out certain kinds of problems easily.
• Write platform-agnostic test scripts when possible. This leaves
you with one copy of site-logic and test-logic for all platforms.
When things change, you’ll be happy its in one place.
SEPARATION OF CONTROL
FROM SCRIPTING
• An extra layer is great to log information and perform additional
actions that Selenium can’t assume it needs to do
• We use a layer between that wraps logging, error handling,
and some other things on top of most WebDriver commands
Test Script •IsSignedIn()
Action
Library
•Log(“Retrieving Cookie Auth”);
•var authCookie = GetCookie(auth);
•Log(authCookie);
•return authCookie != null;
WebDriver
Wrapper
•Log (“Getting Cookies”);
•var c = Driver.Manage.().Cookies;
•Log(c);
•var a = Driver.Manage().Cookies[“auth”];
•Log(“Cookie value: “ + a.ToString());
return a;
CENTRALIZING YOUR SITE
MODEL FOR SELF -TESTING
• All hooks (means by which we retrieve WebElements) are stored
in a single class, namespace, or something similar
• Elements are stored lazily; the means to retrieve them are stored,
but the actual WebElement is not retrieved until run-time. We use
classes that wrap calls to By or methods which will return a
WebElements
• Hooks are grouped relevantly and each group has private self-test
setup methods which will navigate the client (e.g. selenium) to
where the hooks exist
• Reflection is used to iterate through all of these groups and run
the private self-test setup methods and then validate the
functionality of the elements
• Annotations (Java) or Attributes (C#) are used to exclude
elements from the tests
ABOUT INTROSPECTION
& REFLECTION
Introspection (Java) and Reflection (C#) is the process by which a
computer program can observe, do type introspection, and modify
its own structure and behavior at runtime.
In the example to follow we store information about how to use
various hooks (references to pieces of user interface) in the code
so that later at runtime we can use the information to determine
how to test our library of hooks.
CENTRALIZED HOOKS
[C#]
namespace Automation.Hooks.Web
{
public static class LoginPage
{
public static WebHook EmailField = By.Id(“email”);
public static WebHook PasswordField = By.Id(“password”);
public static WebHook SubmitButton = By.Id(“submit”);
[OmitFromSelfTest]
public static WebHook Spinner = By.Xpath(“//div[@class=’wait’]”);
private static void _StartSelfTest()
{
_SelfTestSeleniumInterface.Open(“http://www.zoosk.com”)
}
}
}
SIMPLE SELF-TEST
[PseudoCode]
// iterate in depth-first-search order
foreach(class c in Automation.Hooks.Web)
{
if c.hasMethod(“StartSelfTest”)
c.executeMethod(“StartSelfTest”);
foreach(WebHook h in c)
Log.Verify(IsElementPresent(h));
if c.hasMethod(“StopSelfTest”)
c.executeMethod(“StopSelfTest”);
}
MORE ADVANCED
TECHNIQUES
• Subclass WebHook to things like TextBoxHook and have the
test check for reading and writing from the text field using
Selenium
• Do the same for Links, Images, etc. and write custom test
methods
• Randomize the order of which elements are tested to check for
robustness
• Add random data to the tests, e.g. type a random string into
the text box.
• Write custom test methods for structures that require it
CONSOLIDATING AND ABSTRACTING
PRODUCT LEVEL ACTIONS
• Product Level Actions (e.g. Sign In To The Site) are stored in
libraries, so that there exists one good copy that everyone can
use
• The libraries implement generic interfaces so the platform can
be abstracted away (i.e. the native iPhone app and the website
both have libraries with a signup function that conforms to an
interface that can be used in any test script)
• If the process changes for a particular platform, you can
update it in a single place
• If the process change across all platforms, you can use
platform agnostic (generic) libraries and update the logic in a
single place
ABSTRACT LIBRARIES
[C#]
namespace Automation.Libraries
{
public SeleniumActionLibrary WebSignUpLib : ISignUpLib
{
public void SignIn(string email, string password)
{
if (IsSignedIn())
return;
if (!Driver.Url.contains(“login.php”);
Driver.Navigate().GoToUrl(“https://www.zoosk.com/login.php”);
Hooks.Web.LoginPage.EmailField.type(email);
Hooks.Web.LoginPage.PasswordField.type(password);
Hooks.Web.LoginPage.SubmitButton.click();
WaitForElementToNotExist(Hooks.Web.LoginPage.Spinner);
}
}
}
LIBRARY INTERFACE
[C#]
namespace Automation.Libraries
{
interface ISignUpLib
{
void SignIn(string email, string password);
bool IsSignedIn(string email, string password);
void SignOut();
}
}
PLATFORM AGNOSTIC
AUTOMATION SCRIPTS
• Many tests that need to be run are logically identical
across all platforms.
• Deactivate an account, attempt to sign in, expect failure
• Send a message, verify it shows up in sent items
• Take down some web service, verify an error is produced
• Implemented these tests at an abstract level allows you to
have one test for all platforms
• When the logic changes, the logic only exists one place in
your automation code
AN ABSTRACTED
TEST
[C#]
namespace Automation.Tests
{
public static class SignInWithDeactivatedAccountTest: Test
{
public static void Run()
{
AutomationClient [] clients = new AutomationClient[] {
new WebClient(), new iPhoneClient() }
var account = APIUtility.Accounts.CreateTestAccount();
APIUtility.Accounts.Deactivate(account);
foreach(AutomationClient client in clients)
{
client.SignUpInterface.SignIn(account.email, acount.password);
Log.VerifyFalse(!client.IsSignedIn());
} } } }
CONCLUSION
Developers and Designers frequently have to be able to adapt to
rapidly changing code, automation writers can be just as nimble.
If you design and abstract your code well, you can build smaller,
more robust and agile automation scripts.
If anyone is interested in taking up work on bringing iOS support
to Selenium… Call Me.
MORE INFO
Dan Cuellar
Lead Software Engineer – QA Team
danc@zoosk.com
(Email me to retrieve related source code available for sharing)
See Also
Self-Generating Test Artifacts for Selenium WebDriver
Tue 12:20PM – Track B – Marcus Merrell
Building Quality on Foundations of Mud
Tue 2:40PM – Track A – Kristian Rosenwold
The Restless Are Going Native
Wed 2:20PM – Track A – Dante Briones

More Related Content

What's hot

SoapUI Pro Plugin Workshop #SoapUIPlugins
SoapUI Pro Plugin Workshop #SoapUIPluginsSoapUI Pro Plugin Workshop #SoapUIPlugins
SoapUI Pro Plugin Workshop #SoapUIPluginsSmartBear
 
JMeter vs LoadRunner | Edureka
JMeter vs LoadRunner | EdurekaJMeter vs LoadRunner | Edureka
JMeter vs LoadRunner | EdurekaEdureka!
 
Silk Performer Presentation v1
Silk Performer Presentation v1Silk Performer Presentation v1
Silk Performer Presentation v1Sun Technlogies
 
Zero redeployment with JRebel
Zero redeployment with JRebelZero redeployment with JRebel
Zero redeployment with JRebelMinh Hoang
 
Web Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUIWeb Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUIDinesh Kaushik
 
A introduction to Laravel framework
A introduction to Laravel frameworkA introduction to Laravel framework
A introduction to Laravel frameworkPhu Luong Trong
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPeter Hendriks
 
Selenium RC: Automated Testing of Modern Web Applications
Selenium RC: Automated Testing of Modern Web ApplicationsSelenium RC: Automated Testing of Modern Web Applications
Selenium RC: Automated Testing of Modern Web Applicationsqooxdoo
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
 
Selenium - Introduction
Selenium - IntroductionSelenium - Introduction
Selenium - IntroductionANKUR-BA
 
Selena Deckelmann - Sane Schema Management with Alembic and SQLAlchemy @ Pos...
Selena Deckelmann - Sane Schema Management with  Alembic and SQLAlchemy @ Pos...Selena Deckelmann - Sane Schema Management with  Alembic and SQLAlchemy @ Pos...
Selena Deckelmann - Sane Schema Management with Alembic and SQLAlchemy @ Pos...PostgresOpen
 
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,..."Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...Yandex
 
XmlBlackBox English Presentation
XmlBlackBox English PresentationXmlBlackBox English Presentation
XmlBlackBox English PresentationAlexander Crea
 

What's hot (18)

SoapUI Pro Plugin Workshop #SoapUIPlugins
SoapUI Pro Plugin Workshop #SoapUIPluginsSoapUI Pro Plugin Workshop #SoapUIPlugins
SoapUI Pro Plugin Workshop #SoapUIPlugins
 
Postman
PostmanPostman
Postman
 
JMeter vs LoadRunner | Edureka
JMeter vs LoadRunner | EdurekaJMeter vs LoadRunner | Edureka
JMeter vs LoadRunner | Edureka
 
Silk Performer Presentation v1
Silk Performer Presentation v1Silk Performer Presentation v1
Silk Performer Presentation v1
 
Zero redeployment with JRebel
Zero redeployment with JRebelZero redeployment with JRebel
Zero redeployment with JRebel
 
Web Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUIWeb Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUI
 
Jmeter
JmeterJmeter
Jmeter
 
Mini training - Reactive Extensions (Rx)
Mini training - Reactive Extensions (Rx)Mini training - Reactive Extensions (Rx)
Mini training - Reactive Extensions (Rx)
 
A introduction to Laravel framework
A introduction to Laravel frameworkA introduction to Laravel framework
A introduction to Laravel framework
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIs
 
Anypoint platform
Anypoint platformAnypoint platform
Anypoint platform
 
Introduction To AOP
Introduction To AOPIntroduction To AOP
Introduction To AOP
 
Selenium RC: Automated Testing of Modern Web Applications
Selenium RC: Automated Testing of Modern Web ApplicationsSelenium RC: Automated Testing of Modern Web Applications
Selenium RC: Automated Testing of Modern Web Applications
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
 
Selenium - Introduction
Selenium - IntroductionSelenium - Introduction
Selenium - Introduction
 
Selena Deckelmann - Sane Schema Management with Alembic and SQLAlchemy @ Pos...
Selena Deckelmann - Sane Schema Management with  Alembic and SQLAlchemy @ Pos...Selena Deckelmann - Sane Schema Management with  Alembic and SQLAlchemy @ Pos...
Selena Deckelmann - Sane Schema Management with Alembic and SQLAlchemy @ Pos...
 
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,..."Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
 
XmlBlackBox English Presentation
XmlBlackBox English PresentationXmlBlackBox English Presentation
XmlBlackBox English Presentation
 

Viewers also liked

Selenium Camp 2016
Selenium Camp 2016Selenium Camp 2016
Selenium Camp 2016Dan Cuellar
 
Les noves tecnologies
Les noves tecnologiesLes noves tecnologies
Les noves tecnologiesMiau95
 
Brittany's Power point project
Brittany's Power point projectBrittany's Power point project
Brittany's Power point projectbkoval91
 
Professional and play time!
Professional and play time!Professional and play time!
Professional and play time!bkoval91
 
Les noves tecnologies
Les noves tecnologiesLes noves tecnologies
Les noves tecnologiesMiau95
 
Technology in research didactic handout
Technology in research didactic handoutTechnology in research didactic handout
Technology in research didactic handoutEsther Choo
 
Professional and play time!
Professional and play time!Professional and play time!
Professional and play time!bkoval91
 
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - EN
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - ENStarting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - EN
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - ENDan Cuellar
 
Setting UIAutomation free with Appium
Setting UIAutomation free with AppiumSetting UIAutomation free with Appium
Setting UIAutomation free with AppiumDan Cuellar
 
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CN
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CNCreating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CN
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CNDan Cuellar
 
How to Give a Successful Lightning Talk
How to Give a Successful Lightning TalkHow to Give a Successful Lightning Talk
How to Give a Successful Lightning TalkDan Cuellar
 
Setting Apple's UI Automation Free with Appium
Setting Apple's UI Automation Free with AppiumSetting Apple's UI Automation Free with Appium
Setting Apple's UI Automation Free with Appiummobiletestsummit
 
Ota webinar exporting to eu - logistics and fulfillment
Ota webinar   exporting to eu - logistics and fulfillmentOta webinar   exporting to eu - logistics and fulfillment
Ota webinar exporting to eu - logistics and fulfillmentJan Eyckmans
 
Dan Cuellar
Dan CuellarDan Cuellar
Dan CuellarCodeFest
 

Viewers also liked (19)

Selenium Camp 2016
Selenium Camp 2016Selenium Camp 2016
Selenium Camp 2016
 
56947430
5694743056947430
56947430
 
56947430
5694743056947430
56947430
 
Plandeunidad
PlandeunidadPlandeunidad
Plandeunidad
 
Les noves tecnologies
Les noves tecnologiesLes noves tecnologies
Les noves tecnologies
 
Brittany's Power point project
Brittany's Power point projectBrittany's Power point project
Brittany's Power point project
 
Professional and play time!
Professional and play time!Professional and play time!
Professional and play time!
 
Les noves tecnologies
Les noves tecnologiesLes noves tecnologies
Les noves tecnologies
 
Technology in research didactic handout
Technology in research didactic handoutTechnology in research didactic handout
Technology in research didactic handout
 
Professional and play time!
Professional and play time!Professional and play time!
Professional and play time!
 
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - EN
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - ENStarting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - EN
Starting an Open Source Project: 0-100k Users - China Mobile Summit 2015 - EN
 
Setting UIAutomation free with Appium
Setting UIAutomation free with AppiumSetting UIAutomation free with Appium
Setting UIAutomation free with Appium
 
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CN
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CNCreating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CN
Creating an Open Source Project: 0-100k Users - China Mobile Summit 2015 - CN
 
Presentation1(1)
Presentation1(1)Presentation1(1)
Presentation1(1)
 
Plandeunidad
PlandeunidadPlandeunidad
Plandeunidad
 
How to Give a Successful Lightning Talk
How to Give a Successful Lightning TalkHow to Give a Successful Lightning Talk
How to Give a Successful Lightning Talk
 
Setting Apple's UI Automation Free with Appium
Setting Apple's UI Automation Free with AppiumSetting Apple's UI Automation Free with Appium
Setting Apple's UI Automation Free with Appium
 
Ota webinar exporting to eu - logistics and fulfillment
Ota webinar   exporting to eu - logistics and fulfillmentOta webinar   exporting to eu - logistics and fulfillment
Ota webinar exporting to eu - logistics and fulfillment
 
Dan Cuellar
Dan CuellarDan Cuellar
Dan Cuellar
 

Similar to Writing Well Abstracted Automation on Foundations of Jello

Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...seleniumconf
 
DevOps with Elastic Beanstalk - TCCC-2014
DevOps with Elastic Beanstalk - TCCC-2014DevOps with Elastic Beanstalk - TCCC-2014
DevOps with Elastic Beanstalk - TCCC-2014scolestock
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React AppAll Things Open
 
Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)CIVEL Benoit
 
Cerberus_Presentation1
Cerberus_Presentation1Cerberus_Presentation1
Cerberus_Presentation1CIVEL Benoit
 
Interview Question & Answers for Selenium Freshers | LearningSlot
Interview Question & Answers for Selenium Freshers | LearningSlotInterview Question & Answers for Selenium Freshers | LearningSlot
Interview Question & Answers for Selenium Freshers | LearningSlotLearning Slot
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automationElias Nogueira
 
Test automation using selenium
Test automation using seleniumTest automation using selenium
Test automation using seleniumTờ Rang
 
Introduction to java (revised)
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)Sujit Majety
 
SynapseIndia drupal presentation on drupal info
SynapseIndia drupal  presentation on drupal infoSynapseIndia drupal  presentation on drupal info
SynapseIndia drupal presentation on drupal infoSynapseindiappsdevelopment
 
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with reduxMike Melusky
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdprat0ham
 
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-54&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5hemasubbu08
 
An evening with React Native
An evening with React NativeAn evening with React Native
An evening with React NativeMike Melusky
 
Software testing tools
Software testing toolsSoftware testing tools
Software testing toolsGaurav Paliwal
 

Similar to Writing Well Abstracted Automation on Foundations of Jello (20)

Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
 
DevOps with Elastic Beanstalk - TCCC-2014
DevOps with Elastic Beanstalk - TCCC-2014DevOps with Elastic Beanstalk - TCCC-2014
DevOps with Elastic Beanstalk - TCCC-2014
 
Protractor survival guide
Protractor survival guideProtractor survival guide
Protractor survival guide
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React App
 
Selenium Concepts
Selenium ConceptsSelenium Concepts
Selenium Concepts
 
Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)Cerberus : Framework for Manual and Automated Testing (Web Application)
Cerberus : Framework for Manual and Automated Testing (Web Application)
 
Cerberus_Presentation1
Cerberus_Presentation1Cerberus_Presentation1
Cerberus_Presentation1
 
Interview Question & Answers for Selenium Freshers | LearningSlot
Interview Question & Answers for Selenium Freshers | LearningSlotInterview Question & Answers for Selenium Freshers | LearningSlot
Interview Question & Answers for Selenium Freshers | LearningSlot
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
 
Test automation using selenium
Test automation using seleniumTest automation using selenium
Test automation using selenium
 
Introduction to java (revised)
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)
 
SynapseIndia drupal presentation on drupal info
SynapseIndia drupal  presentation on drupal infoSynapseIndia drupal  presentation on drupal info
SynapseIndia drupal presentation on drupal info
 
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with redux
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rd
 
Selenium
SeleniumSelenium
Selenium
 
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-54&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
4&5.pptx SOFTWARE TESTING UNIT-4 AND UNIT-5
 
An evening with React Native
An evening with React NativeAn evening with React Native
An evening with React Native
 
Sel
SelSel
Sel
 
Selenium
SeleniumSelenium
Selenium
 
Software testing tools
Software testing toolsSoftware testing tools
Software testing tools
 

Recently uploaded

Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 

Recently uploaded (20)

Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 

Writing Well Abstracted Automation on Foundations of Jello

  • 1. WRITING WELL-ABSTRACTED SELF-TESTING AUTOMATION ON TOP OF JELL-O® DAN CUELLAR LEAD SOFTWARE ENGINEER ZOOSK - QA TEAM
  • 2. TERMINOLOGY Test or Automation Script a series of steps and expected output Hook or Element a means of identifying a piece of UI (think the By class in WebDriver) Controller a program which executes basic commands (think WebDriver or SeleniumRC Server)
  • 3. PHILOSOPHY • Selenium is a controller program, it exists to perform actions on a platform (web browsers) • Click a link • Read some text • Libraries exist to coordinate these small actions into larger logical actions on a particular platform • Sign In • Send A Message • Get All Error Messages • Interfaces exist to remove the platform from the context of libraries • Automation scripts should coordinate the highest level of abstraction whenever possible to maintain agility and robustness
  • 4. A BIT ABOUT ZOOSK • Zoosk is a romantic social network with tens of millions of users that operates in 25 languages and in over 70 countries. • Products include: • web site • mobile web site • Facebook app • iPhone app • iPad app • Android app • Adobe Air app • The development pace is rapid, features are churned out in around 2 weeks time (including testing) • Product management is always running experiments and adjusting plans based on data from instrumentation • Developer to quality assurance ratio hovers somewhere around 10:1
  • 5. SO WHAT DO YOU MEAN BY JELL-O® Jell-O [jel-oh] Site wide A/B tests where ½ of users will see a complete site redesign and the other ½ will use the site as it was before. Facebook app users can also split between different A and B designs at times. Each A & B may have its own JS, CSS, and business logic to go along with it. Not to mention that different versions of the API were being used by the web, Facebook app, and mobile apps. All the while, different features were being enabled and disabled for different subsets of the A/B test groups
  • 6.
  • 7.
  • 8. WHAT CAN GO WRONG? • General • Not enough information is retrieved to reproduce the failure • Elements • The type can change (e.g. dropdown becomes a checkbox) • An element can change location • An element can have multiple ways of identifying itself depending on an A/B test • Business Logic • Logic can change for one platform • Logic can change for some users and not others (A/B test) • Logic can change for all platforms
  • 9. HOW DO WE COMBAT THESE PROBLEMS? • General • Not enough information is retrieved to reproduce the failure • Separate test actions from controller code, add abundant logging, and unify the patterns by which common operations are accomplished (e.g. selecting from dropdown) Don’t access selenium directly in any scripts. Create a wrapper that logs everything and performs basic checks. (e.g. is the choice available on the dropdown) • If libraries are used then you can log just about everything possible every time without having to re-paste all the logging code
  • 10. HOW DO WE COMBAT THESE PROBLEMS? (CONT.) • Elements • The type can change • Abstracting away all uses of the item into a library • An element can change location • Centralize all hooks into the UI, you can change it once and it will be fixed for all • Using reflection, you can verify that all of your hooks are functional • An element can have multiple ways of identifying itself depending on an A/B test • ID’s are great, but you can also use an XPath Or expression in your centralized hook
  • 11. HOW DO WE COMBAT THESE PROBLEMS? (CONT.) • Business Logic • Logic can change for one platform • Update the library for that platform • Logic can change for some users and not others (A/B test) • Detect the A/B test in the library • Logic can change for all platforms • Generic Libraries or test scripts which coordinate platform specific libraries are a great place to address this
  • 12. HOW DO YOU DEAL WITH THAT AGAIN? • Separate logical actions From calls to controller (in this case Selenium) code into libraries • Centralize your site model and logic, so that all automation runs through one place. When you have to fix something, you can fix it once for everything. • Write code that can test the test automation. Investigating test script failures can be costly, but if you test code can test itself you will be able to pick out certain kinds of problems easily. • Write platform-agnostic test scripts when possible. This leaves you with one copy of site-logic and test-logic for all platforms. When things change, you’ll be happy its in one place.
  • 13. SEPARATION OF CONTROL FROM SCRIPTING • An extra layer is great to log information and perform additional actions that Selenium can’t assume it needs to do • We use a layer between that wraps logging, error handling, and some other things on top of most WebDriver commands Test Script •IsSignedIn() Action Library •Log(“Retrieving Cookie Auth”); •var authCookie = GetCookie(auth); •Log(authCookie); •return authCookie != null; WebDriver Wrapper •Log (“Getting Cookies”); •var c = Driver.Manage.().Cookies; •Log(c); •var a = Driver.Manage().Cookies[“auth”]; •Log(“Cookie value: “ + a.ToString()); return a;
  • 14. CENTRALIZING YOUR SITE MODEL FOR SELF -TESTING • All hooks (means by which we retrieve WebElements) are stored in a single class, namespace, or something similar • Elements are stored lazily; the means to retrieve them are stored, but the actual WebElement is not retrieved until run-time. We use classes that wrap calls to By or methods which will return a WebElements • Hooks are grouped relevantly and each group has private self-test setup methods which will navigate the client (e.g. selenium) to where the hooks exist • Reflection is used to iterate through all of these groups and run the private self-test setup methods and then validate the functionality of the elements • Annotations (Java) or Attributes (C#) are used to exclude elements from the tests
  • 15. ABOUT INTROSPECTION & REFLECTION Introspection (Java) and Reflection (C#) is the process by which a computer program can observe, do type introspection, and modify its own structure and behavior at runtime. In the example to follow we store information about how to use various hooks (references to pieces of user interface) in the code so that later at runtime we can use the information to determine how to test our library of hooks.
  • 16. CENTRALIZED HOOKS [C#] namespace Automation.Hooks.Web { public static class LoginPage { public static WebHook EmailField = By.Id(“email”); public static WebHook PasswordField = By.Id(“password”); public static WebHook SubmitButton = By.Id(“submit”); [OmitFromSelfTest] public static WebHook Spinner = By.Xpath(“//div[@class=’wait’]”); private static void _StartSelfTest() { _SelfTestSeleniumInterface.Open(“http://www.zoosk.com”) } } }
  • 17. SIMPLE SELF-TEST [PseudoCode] // iterate in depth-first-search order foreach(class c in Automation.Hooks.Web) { if c.hasMethod(“StartSelfTest”) c.executeMethod(“StartSelfTest”); foreach(WebHook h in c) Log.Verify(IsElementPresent(h)); if c.hasMethod(“StopSelfTest”) c.executeMethod(“StopSelfTest”); }
  • 18. MORE ADVANCED TECHNIQUES • Subclass WebHook to things like TextBoxHook and have the test check for reading and writing from the text field using Selenium • Do the same for Links, Images, etc. and write custom test methods • Randomize the order of which elements are tested to check for robustness • Add random data to the tests, e.g. type a random string into the text box. • Write custom test methods for structures that require it
  • 19. CONSOLIDATING AND ABSTRACTING PRODUCT LEVEL ACTIONS • Product Level Actions (e.g. Sign In To The Site) are stored in libraries, so that there exists one good copy that everyone can use • The libraries implement generic interfaces so the platform can be abstracted away (i.e. the native iPhone app and the website both have libraries with a signup function that conforms to an interface that can be used in any test script) • If the process changes for a particular platform, you can update it in a single place • If the process change across all platforms, you can use platform agnostic (generic) libraries and update the logic in a single place
  • 20. ABSTRACT LIBRARIES [C#] namespace Automation.Libraries { public SeleniumActionLibrary WebSignUpLib : ISignUpLib { public void SignIn(string email, string password) { if (IsSignedIn()) return; if (!Driver.Url.contains(“login.php”); Driver.Navigate().GoToUrl(“https://www.zoosk.com/login.php”); Hooks.Web.LoginPage.EmailField.type(email); Hooks.Web.LoginPage.PasswordField.type(password); Hooks.Web.LoginPage.SubmitButton.click(); WaitForElementToNotExist(Hooks.Web.LoginPage.Spinner); } } }
  • 21. LIBRARY INTERFACE [C#] namespace Automation.Libraries { interface ISignUpLib { void SignIn(string email, string password); bool IsSignedIn(string email, string password); void SignOut(); } }
  • 22. PLATFORM AGNOSTIC AUTOMATION SCRIPTS • Many tests that need to be run are logically identical across all platforms. • Deactivate an account, attempt to sign in, expect failure • Send a message, verify it shows up in sent items • Take down some web service, verify an error is produced • Implemented these tests at an abstract level allows you to have one test for all platforms • When the logic changes, the logic only exists one place in your automation code
  • 23. AN ABSTRACTED TEST [C#] namespace Automation.Tests { public static class SignInWithDeactivatedAccountTest: Test { public static void Run() { AutomationClient [] clients = new AutomationClient[] { new WebClient(), new iPhoneClient() } var account = APIUtility.Accounts.CreateTestAccount(); APIUtility.Accounts.Deactivate(account); foreach(AutomationClient client in clients) { client.SignUpInterface.SignIn(account.email, acount.password); Log.VerifyFalse(!client.IsSignedIn()); } } } }
  • 24. CONCLUSION Developers and Designers frequently have to be able to adapt to rapidly changing code, automation writers can be just as nimble. If you design and abstract your code well, you can build smaller, more robust and agile automation scripts. If anyone is interested in taking up work on bringing iOS support to Selenium… Call Me.
  • 25. MORE INFO Dan Cuellar Lead Software Engineer – QA Team danc@zoosk.com (Email me to retrieve related source code available for sharing) See Also Self-Generating Test Artifacts for Selenium WebDriver Tue 12:20PM – Track B – Marcus Merrell Building Quality on Foundations of Mud Tue 2:40PM – Track A – Kristian Rosenwold The Restless Are Going Native Wed 2:20PM – Track A – Dante Briones