SlideShare a Scribd company logo
1 of 90
Download to read offline
Advanced Appium Tips & Tricks
Jonathan Lipps • Founding Principal • Cloud Grey


@AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com
Perfecto Mobile Webinar · The Internet
April 24, 2018
© 2015, Perfecto Mobile Ltd. All Rights Reserved.
Housekeeping
• Please participate in our live poll and end-of-webinar survey
• Ask us questions in the QA panel
• We will send you the recording and slides
4/21/2018 2
Founding Principal
Architect, Maintainer
Jonathan Lipps • Founding Principal • Cloud Grey


@AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com
Appium Update
AppiumConf!
@jlipps · cloudgrey.io
Watch the videos at
appiumconf.com
Stay tuned for next year.
Thanks for sponsoring,
Perfecto!
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
iOS Screen Recording
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
iOS Screen Recording
iOS Performance data gathering via Instruments
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
iOS Screen Recording
iOS Performance data gathering via Instruments
Android Broadcast device logs for log streaming
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
iOS Screen Recording
iOS Performance data gathering via Instruments
Android Broadcast device logs for log streaming
Android Support ‘Instant Apps’
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
W3C WebDriver spec support
App management features
Improved screen-related primitives
Clipboard management features
Auxiliary app support via otherApps capability
iOS Screen Recording
iOS Performance data gathering via Instruments
Android Broadcast device logs for log streaming
Android Support ‘Instant Apps’
Many, many bugfixes and performance/stability improvements
What’s new in Appium 1.8?
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
npm install -g appium
© 2015, Perfecto Mobile Ltd. All Rights Reserved.
Poll Question
What feature would you most want to see Implemented in
Appium?
• Support for network virtualization (3G, 4G, packet loss %, etc.)
• Support for visual testing (barcode scanning, check deposit use
cases)
• Support for gesture like Face ID, Finger Print, and more
• Better Cross platform automation for all platforms including
smartwatch, iOS, Android
• Support for audio and video testing (chatbots, MOS, 

etc.)
• Other
4/21/2018 8
Today’s tips: recent selections from appiumpro.com
@jlipps · cloudgrey.io
Finding elements with greater speed and stability
Today’s tips: recent selections from appiumpro.com
@jlipps · cloudgrey.io
Finding elements with greater speed and stability
Using deep links to speed up tests and reduce flakiness
Today’s tips: recent selections from appiumpro.com
@jlipps · cloudgrey.io
Finding elements with greater speed and stability
Using deep links to speed up tests and reduce flakiness
Testing app upgrade scenarios
Today’s tips: recent selections from appiumpro.com
@jlipps · cloudgrey.io
Finding elements with greater speed and stability
Using deep links to speed up tests and reduce flakiness
Testing app upgrade scenarios
Cross-platform testing best practices
Today’s tips: recent selections from appiumpro.com
@jlipps · cloudgrey.io
Element Locators
@jlipps · cloudgrey.io
driver.findElement(By.className(“Button”));
@jlipps · cloudgrey.io
driver.findElement(By.className(“Button”));
locator strategy
@jlipps · cloudgrey.io
driver.findElement(By.className(“Button”));
locator strategy selector
Locator Strategy From Support in Appium
class name Selenium Yes
id Selenium Yes
name Selenium Yes
xpath Selenium Yes
accessibility id Appium Yes
-ios predicate string Appium Yes
-ios class chain Appium Yes
-android uiautomator Appium Yes
-ios uiautomation Appium Deprecated
css selector Selenium No
link text Selenium No
partial link text Selenium No
tag name Selenium No
@jlipps · cloudgrey.io
Why use XPath?
@jlipps · cloudgrey.io
It allows for the formulation of complex queries (for example, using the @contains
function)
Why use XPath?
@jlipps · cloudgrey.io
It allows for the formulation of complex queries (for example, using the @contains
function)
It can identify any element in the UI hierarchy available to Appium
Why use XPath?
@jlipps · cloudgrey.io
It allows for the formulation of complex queries (for example, using the @contains
function)
It can identify any element in the UI hierarchy available to Appium
…
Why use XPath?
@jlipps · cloudgrey.io
It allows for the formulation of complex queries (for example, using the @contains
function)
It can identify any element in the UI hierarchy available to Appium
…
that’s about it
Why use XPath?
@jlipps · cloudgrey.io
Why not to use XPath
@jlipps · cloudgrey.io
Why not to use XPath
@jlipps · cloudgrey.io
Path-based selectors are brittle
Why not to use XPath
@jlipps · cloudgrey.io
Path-based selectors are brittle
It is often expensive to generate an XML representation of the UI
Why not to use XPath
@jlipps · cloudgrey.io
Path-based selectors are brittle
It is often expensive to generate an XML representation of the UI
It is often expensive to map XML elements found by XPath to native element objects
Why not to use XPath
@jlipps · cloudgrey.io
Path-based selectors are brittle
It is often expensive to generate an XML representation of the UI
It is often expensive to map XML elements found by XPath to native element objects
XPath selectors are not cross-platform
Preferred locator strategies
@jlipps · cloudgrey.io
Preferred locator strategies
@jlipps · cloudgrey.io
MobileBy.AccessibilityId
Cross-platform locator strategy, will find
elements by Accessibility Id (or Name) on
iOS, and Content Description on Android
Preferred locator strategies
@jlipps · cloudgrey.io
MobileBy.AccessibilityId
Cross-platform locator strategy, will find
elements by Accessibility Id (or Name) on
iOS, and Content Description on Android
By.id
Cross-platform locator strategy, will find
elements by Id (and a set of other unique
identifiers) on iOS, and android:id on
Android
“Advanced” locator strategies
@jlipps · cloudgrey.io
“Advanced” locator strategies
@jlipps · cloudgrey.io
MobileBy.iOSNsPredicateString
iOS-only locator strategy that allows complex
element lookups based on attributes
“Advanced” locator strategies
@jlipps · cloudgrey.io
MobileBy.iOSNsPredicateString
iOS-only locator strategy that allows complex
element lookups based on attributes
MobileBy.iOSClassChain
iOS-only locator strategy that allows complex
element lookups based on attributes and
hierarchy
“Advanced” locator strategies
@jlipps · cloudgrey.io
MobileBy.iOSNsPredicateString
iOS-only locator strategy that allows complex
element lookups based on attributes
MobileBy.iOSClassChain
iOS-only locator strategy that allows complex
element lookups based on attributes and
hierarchy
MobileBy.AndroidUIAutomator
Android-only locator strategy that allows use
the UiSelector API to chain element
finding restrictions
iOS Predicate String example
@jlipps · cloudgrey.io
MobileBy.iOSNsPredicateString(
"type == 'XCUIElementTypeButton' AND value BEGINSWITH[c] 'foo' AND visible == 1"
);
iOS Class Chain example
@jlipps · cloudgrey.io
MobileBy.iOSClassChain(
"**/XCUIElementTypeCell[`name BEGINSWITH “C"`]/XCUIElementTypeButton[10]"
);
Android UiAutomator example
@jlipps · cloudgrey.io
MobileBy.AndroidUIAutomator(
'new UiSelector().className("ScrollView").getChildByText(new
UiSelector().className("android.widget.TextView"), "Tabs")'
);
Deep Links
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
~30 seconds
@jlipps · cloudgrey.io
30 seconds x 50 tests = 25 minutes
Strategies to set up app state instantly
@jlipps · cloudgrey.io
Android Start the test with custom intents
to navigate directly to the right place
Use intentAction and
optionalIntentArguments parameters
to driver.startActivity
Strategies to set up app state instantly
@jlipps · cloudgrey.io
Android Start the test with custom intents
to navigate directly to the right place
Use intentAction and
optionalIntentArguments parameters
to driver.startActivity
iOS Start the app with custom arguments
using Appium capabilities
Use the processArguments capability
when starting a session
Strategies to set up app state instantly
@jlipps · cloudgrey.io
Android Start the test with custom intents
to navigate directly to the right place
Use intentAction and
optionalIntentArguments parameters
to driver.startActivity
iOS Start the app with custom arguments
using Appium capabilities
Use the processArguments capability
when starting a session
Cross-platform Use deep linking
Implement a custom url scheme in your app,
then simply use driver.get
Strategies to set up app state instantly
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
yourapp://test/login/:username/:password
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
~5 seconds
@jlipps · cloudgrey.io
5 seconds x 50 tests = ~4 minutes
Testing App Upgrades
App upgrades on Android
@jlipps · cloudgrey.io
Get paths to two versions of your app
App upgrades on Android
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
App upgrades on Android
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
Install the new app using driver.installApp
App upgrades on Android
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
Install the new app using driver.installApp
Trigger the new app to relaunch by using driver.startActivity
App upgrades on Android
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
App upgrades on iOS
@jlipps · cloudgrey.io
Get paths to two versions of your app
App upgrades on iOS
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
App upgrades on iOS
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
Stop the current app using mobile: terminateApp
App upgrades on iOS
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
Stop the current app using mobile: terminateApp
Install the new app using mobile: installApp
App upgrades on iOS
@jlipps · cloudgrey.io
Get paths to two versions of your app
Start an Appium session using the older version of the app (via the app capability)
Stop the current app using mobile: terminateApp
Install the new app using mobile: installApp
Trigger the new app to relaunch by using mobile: launchApp
App upgrades on iOS
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
Cross-platform Tips
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make
them the same!
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make
them the same!
As much as possible within the product design requirements, keep user flows the same
across apps
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make
them the same!
As much as possible within the product design requirements, keep user flows the same
across apps
Build a test version of your app that has all kinds of state set-up goodies
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make
them the same!
As much as possible within the product design requirements, keep user flows the same
across apps
Build a test version of your app that has all kinds of state set-up goodies
Make debug versions of builds
Tips for app development
@jlipps · cloudgrey.io
Add labels to any element that might be used in testing (i.e., pretty much every
element)
Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make
them the same!
As much as possible within the product design requirements, keep user flows the same
across apps
Build a test version of your app that has all kinds of state set-up goodies
Make debug versions of builds
iOS Use Wildcard App IDs in Provisioning Profiles (so WebDriverAgent can be built
using a custom Bundle ID that works with the profile)
Tips for app development
@jlipps · cloudgrey.io
Tips for the testsuite
@jlipps · cloudgrey.io
Use a Page Object Model strategy (or similar), to keep differences between platforms
encapsulated
Tips for the testsuite
@jlipps · cloudgrey.io
Use a Page Object Model strategy (or similar), to keep differences between platforms
encapsulated
Test step code should be totally platform-agnostic. Only your runner and your object
model should know about platform
Tips for the testsuite
@jlipps · cloudgrey.io
Use a Page Object Model strategy (or similar), to keep differences between platforms
encapsulated
Test step code should be totally platform-agnostic. Only your runner and your object
model should know about platform
Avoid XPath in favor of cross-platform locator strategies
Tips for the testsuite
@jlipps · cloudgrey.io
Use a Page Object Model strategy (or similar), to keep differences between platforms
encapsulated
Test step code should be totally platform-agnostic. Only your runner and your object
model should know about platform
Avoid XPath in favor of cross-platform locator strategies
Dynamically update test name for reports to include platform name or other details, for
easier debugging
Tips for the testsuite
@jlipps · cloudgrey.io
@jlipps · cloudgrey.io
More tips like these sent by e-mail every week
Subscribe at appiumpro.com
Thank You!
Your free weekly Appium newsletter:
appiumpro.com
Jonathan Lipps • Founding Principal • Cloud Grey


@AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com
Questions?
Your free weekly Appium newsletter:
appiumpro.com
Jonathan Lipps • Founding Principal • Cloud Grey


@AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com

More Related Content

What's hot

Mobile architecture overview
Mobile architecture overviewMobile architecture overview
Mobile architecture overview
David Scruggs
 
Handling FDA Inspection - Do's and Dont's
Handling FDA Inspection - Do's and Dont'sHandling FDA Inspection - Do's and Dont's
Handling FDA Inspection - Do's and Dont's
Arun Purohit
 

What's hot (20)

Device registration ppt
Device registration pptDevice registration ppt
Device registration ppt
 
Equipment qualification of medical device
Equipment qualification of medical deviceEquipment qualification of medical device
Equipment qualification of medical device
 
Application Performance Monitoring
Application Performance MonitoringApplication Performance Monitoring
Application Performance Monitoring
 
Good Practices for Computerised Systems : PIC/S Guidance
Good Practices for Computerised Systems : PIC/S GuidanceGood Practices for Computerised Systems : PIC/S Guidance
Good Practices for Computerised Systems : PIC/S Guidance
 
What are the Uses & Benefits of Google Maps?
What are the Uses & Benefits of Google Maps?What are the Uses & Benefits of Google Maps?
What are the Uses & Benefits of Google Maps?
 
Guidance for Preparing Standard Operating Procedures (SOPs)
Guidance for Preparing Standard Operating Procedures (SOPs) Guidance for Preparing Standard Operating Procedures (SOPs)
Guidance for Preparing Standard Operating Procedures (SOPs)
 
What is API Product Management by PayPal Director of Product
What is API Product Management by PayPal Director of ProductWhat is API Product Management by PayPal Director of Product
What is API Product Management by PayPal Director of Product
 
The API Economy: API Provider Perspective / European Identity Summit 2012
The API Economy: API Provider Perspective / European Identity Summit 2012The API Economy: API Provider Perspective / European Identity Summit 2012
The API Economy: API Provider Perspective / European Identity Summit 2012
 
Mobile architecture overview
Mobile architecture overviewMobile architecture overview
Mobile architecture overview
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
Understanding the Medical device Single Audit Program (MDSAP) & How to Prepar...
Understanding the Medical device Single Audit Program (MDSAP) & How to Prepar...Understanding the Medical device Single Audit Program (MDSAP) & How to Prepar...
Understanding the Medical device Single Audit Program (MDSAP) & How to Prepar...
 
The Architecture of an API Platform
The Architecture of an API PlatformThe Architecture of an API Platform
The Architecture of an API Platform
 
Handling FDA Inspection - Do's and Dont's
Handling FDA Inspection - Do's and Dont'sHandling FDA Inspection - Do's and Dont's
Handling FDA Inspection - Do's and Dont's
 
Android Auto
Android AutoAndroid Auto
Android Auto
 
Android İşletim Sistemi
Android İşletim SistemiAndroid İşletim Sistemi
Android İşletim Sistemi
 
Testing plan for an ecommerce site
Testing plan for an ecommerce siteTesting plan for an ecommerce site
Testing plan for an ecommerce site
 
Qms ISO 13485 2016 short overview
Qms ISO 13485 2016 short overview Qms ISO 13485 2016 short overview
Qms ISO 13485 2016 short overview
 
Introduction to Android, Architecture & Components
Introduction to  Android, Architecture & ComponentsIntroduction to  Android, Architecture & Components
Introduction to Android, Architecture & Components
 
Fitness app proposal
Fitness app proposalFitness app proposal
Fitness app proposal
 
Good practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium testsGood practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium tests
 

Similar to Advanced Appium Tips & Tricks with Jonathan Lipps

Building Mobile Optimized Websites
Building Mobile Optimized WebsitesBuilding Mobile Optimized Websites
Building Mobile Optimized Websites
haxorize
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talk
Imam Raza
 
Mastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with AppiumMastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with Appium
Perfecto by Perforce
 

Similar to Advanced Appium Tips & Tricks with Jonathan Lipps (20)

“Building Mobile Optimized Websites,” Nick Bourgeois / Ray Villares
“Building Mobile Optimized Websites,” Nick Bourgeois / Ray Villares“Building Mobile Optimized Websites,” Nick Bourgeois / Ray Villares
“Building Mobile Optimized Websites,” Nick Bourgeois / Ray Villares
 
Building Mobile Optimized Websites
Building Mobile Optimized WebsitesBuilding Mobile Optimized Websites
Building Mobile Optimized Websites
 
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
 
Certified Professional Appium for Mobile Testing
Certified Professional Appium for Mobile TestingCertified Professional Appium for Mobile Testing
Certified Professional Appium for Mobile Testing
 
Mastering the Art of Mobile Testing by Akshita Puram
Mastering the Art of Mobile Testing by Akshita PuramMastering the Art of Mobile Testing by Akshita Puram
Mastering the Art of Mobile Testing by Akshita Puram
 
Colorful world-of-visual-automation-testing-latest
Colorful world-of-visual-automation-testing-latestColorful world-of-visual-automation-testing-latest
Colorful world-of-visual-automation-testing-latest
 
Appium workshop technopark trivandrum
Appium workshop technopark trivandrumAppium workshop technopark trivandrum
Appium workshop technopark trivandrum
 
Uber's new mobile architecture
Uber's new mobile architectureUber's new mobile architecture
Uber's new mobile architecture
 
Platform 4.0 Meetup Launch Event
Platform 4.0 Meetup Launch EventPlatform 4.0 Meetup Launch Event
Platform 4.0 Meetup Launch Event
 
Building Mobile (app) Masterpiece with Distributed Agile
Building Mobile (app) Masterpiece with Distributed AgileBuilding Mobile (app) Masterpiece with Distributed Agile
Building Mobile (app) Masterpiece with Distributed Agile
 
API Services: Building State-of-the-Art APIs
API Services: Building State-of-the-Art APIsAPI Services: Building State-of-the-Art APIs
API Services: Building State-of-the-Art APIs
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talk
 
Pyramid tutorial
Pyramid tutorialPyramid tutorial
Pyramid tutorial
 
Mastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with AppiumMastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with Appium
 
Appium testing api
Appium testing apiAppium testing api
Appium testing api
 
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
 
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
 
JavaScript for ASP.NET programmers (webcast) upload
JavaScript for ASP.NET programmers (webcast) uploadJavaScript for ASP.NET programmers (webcast) upload
JavaScript for ASP.NET programmers (webcast) upload
 
AngularJS App In Two Weeks
AngularJS App In Two WeeksAngularJS App In Two Weeks
AngularJS App In Two Weeks
 
移动端Web app开发
移动端Web app开发移动端Web app开发
移动端Web app开发
 

More from Perfecto by Perforce

How to Scale Digital App Testing With Jenkins & Automation You Can Trust
How to Scale Digital App Testing With Jenkins & Automation You Can TrustHow to Scale Digital App Testing With Jenkins & Automation You Can Trust
How to Scale Digital App Testing With Jenkins & Automation You Can Trust
Perfecto by Perforce
 
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best PracticesHow to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
Perfecto by Perforce
 
Best Practices for Shifting Left Performance and Accessibility Testing
Best Practices for Shifting Left Performance and Accessibility TestingBest Practices for Shifting Left Performance and Accessibility Testing
Best Practices for Shifting Left Performance and Accessibility Testing
Perfecto by Perforce
 

More from Perfecto by Perforce (20)

Is BDD Worth It? Considerations for Advanced Test Automation
Is BDD Worth It? Considerations for Advanced Test AutomationIs BDD Worth It? Considerations for Advanced Test Automation
Is BDD Worth It? Considerations for Advanced Test Automation
 
Yoda debunks the top 5 challenges of continuous testing in the cloud
Yoda debunks the top 5 challenges of continuous testing in the cloudYoda debunks the top 5 challenges of continuous testing in the cloud
Yoda debunks the top 5 challenges of continuous testing in the cloud
 
5 Mobile App Trends & What They Mean for Dev & Testing
5 Mobile App Trends & What They Mean for Dev & Testing5 Mobile App Trends & What They Mean for Dev & Testing
5 Mobile App Trends & What They Mean for Dev & Testing
 
How to Scale Digital App Testing With Jenkins & Automation You Can Trust
How to Scale Digital App Testing With Jenkins & Automation You Can TrustHow to Scale Digital App Testing With Jenkins & Automation You Can Trust
How to Scale Digital App Testing With Jenkins & Automation You Can Trust
 
Mastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and SeleniumMastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and Selenium
 
Cloud Testing Has Never Been Easier or More Accessible
Cloud Testing Has Never Been Easier or More AccessibleCloud Testing Has Never Been Easier or More Accessible
Cloud Testing Has Never Been Easier or More Accessible
 
Cognitive Engineering - Shifting Right with Gated.AI Testing - DevOps Next
Cognitive Engineering - Shifting Right with Gated.AI Testing - DevOps NextCognitive Engineering - Shifting Right with Gated.AI Testing - DevOps Next
Cognitive Engineering - Shifting Right with Gated.AI Testing - DevOps Next
 
The Rise and Benefits of Robotic Process Automation (RPA) - DevOps Next
The Rise and Benefits of Robotic Process Automation (RPA) - DevOps NextThe Rise and Benefits of Robotic Process Automation (RPA) - DevOps Next
The Rise and Benefits of Robotic Process Automation (RPA) - DevOps Next
 
The New Categories of Software Defects in the Era of AI and ML - DevOps Next
The New Categories of Software Defects in the Era of AI and ML - DevOps NextThe New Categories of Software Defects in the Era of AI and ML - DevOps Next
The New Categories of Software Defects in the Era of AI and ML - DevOps Next
 
Moving to Modern DevOps with Fuzzing and ML - DevOps Next
Moving to Modern DevOps with Fuzzing and ML - DevOps NextMoving to Modern DevOps with Fuzzing and ML - DevOps Next
Moving to Modern DevOps with Fuzzing and ML - DevOps Next
 
Leveraging AI and ML in Test Management Systems - DevOps Next
Leveraging AI and ML in Test Management Systems - DevOps NextLeveraging AI and ML in Test Management Systems - DevOps Next
Leveraging AI and ML in Test Management Systems - DevOps Next
 
How Does AIOps Benefit DevOps Pipeline and Software Quality? - DevOps Next
How Does AIOps Benefit DevOps Pipeline and Software Quality? - DevOps NextHow Does AIOps Benefit DevOps Pipeline and Software Quality? - DevOps Next
How Does AIOps Benefit DevOps Pipeline and Software Quality? - DevOps Next
 
Classification of Advanced AI and ML Testing Tools - DevOps Next
Classification of Advanced AI and ML Testing Tools - DevOps NextClassification of Advanced AI and ML Testing Tools - DevOps Next
Classification of Advanced AI and ML Testing Tools - DevOps Next
 
Automated Code Reviews with AI and ML - DevOps Next
Automated Code Reviews with AI and ML - DevOps NextAutomated Code Reviews with AI and ML - DevOps Next
Automated Code Reviews with AI and ML - DevOps Next
 
Advancing the State of The Art in AI and Testing - DevOps Next
Advancing the State of The Art in AI and Testing - DevOps NextAdvancing the State of The Art in AI and Testing - DevOps Next
Advancing the State of The Art in AI and Testing - DevOps Next
 
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best PracticesHow to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
How to Prepare Your Apps for iOS 14 - Test Strategy, Coverage, & Best Practices
 
How to Create a Risk Based Testing Strategy With Simulators, Emulators, and R...
How to Create a Risk Based Testing Strategy With Simulators, Emulators, and R...How to Create a Risk Based Testing Strategy With Simulators, Emulators, and R...
How to Create a Risk Based Testing Strategy With Simulators, Emulators, and R...
 
Fast Data, Fast Delivery: How Smart Analysis Accelerates App Testing
Fast Data, Fast Delivery: How Smart Analysis Accelerates App TestingFast Data, Fast Delivery: How Smart Analysis Accelerates App Testing
Fast Data, Fast Delivery: How Smart Analysis Accelerates App Testing
 
Best Practices for Shifting Left Performance and Accessibility Testing
Best Practices for Shifting Left Performance and Accessibility TestingBest Practices for Shifting Left Performance and Accessibility Testing
Best Practices for Shifting Left Performance and Accessibility Testing
 
Deliver Flawless Mobile Apps Faster with CI/CD & CT
Deliver Flawless Mobile Apps Faster with CI/CD & CTDeliver Flawless Mobile Apps Faster with CI/CD & CT
Deliver Flawless Mobile Apps Faster with CI/CD & CT
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

Advanced Appium Tips & Tricks with Jonathan Lipps

  • 1. Advanced Appium Tips & Tricks Jonathan Lipps • Founding Principal • Cloud Grey 
 @AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com Perfecto Mobile Webinar · The Internet April 24, 2018
  • 2. © 2015, Perfecto Mobile Ltd. All Rights Reserved. Housekeeping • Please participate in our live poll and end-of-webinar survey • Ask us questions in the QA panel • We will send you the recording and slides 4/21/2018 2
  • 3. Founding Principal Architect, Maintainer Jonathan Lipps • Founding Principal • Cloud Grey 
 @AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com
  • 5. AppiumConf! @jlipps · cloudgrey.io Watch the videos at appiumconf.com Stay tuned for next year. Thanks for sponsoring, Perfecto!
  • 6. What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 7. W3C WebDriver spec support What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 8. W3C WebDriver spec support App management features What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 9. W3C WebDriver spec support App management features Improved screen-related primitives What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 10. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 11. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 12. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability iOS Screen Recording What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 13. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability iOS Screen Recording iOS Performance data gathering via Instruments What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 14. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability iOS Screen Recording iOS Performance data gathering via Instruments Android Broadcast device logs for log streaming What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 15. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability iOS Screen Recording iOS Performance data gathering via Instruments Android Broadcast device logs for log streaming Android Support ‘Instant Apps’ What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 16. W3C WebDriver spec support App management features Improved screen-related primitives Clipboard management features Auxiliary app support via otherApps capability iOS Screen Recording iOS Performance data gathering via Instruments Android Broadcast device logs for log streaming Android Support ‘Instant Apps’ Many, many bugfixes and performance/stability improvements What’s new in Appium 1.8? @jlipps · cloudgrey.io
  • 17. @jlipps · cloudgrey.io npm install -g appium
  • 18. © 2015, Perfecto Mobile Ltd. All Rights Reserved. Poll Question What feature would you most want to see Implemented in Appium? • Support for network virtualization (3G, 4G, packet loss %, etc.) • Support for visual testing (barcode scanning, check deposit use cases) • Support for gesture like Face ID, Finger Print, and more • Better Cross platform automation for all platforms including smartwatch, iOS, Android • Support for audio and video testing (chatbots, MOS, 
 etc.) • Other 4/21/2018 8
  • 19. Today’s tips: recent selections from appiumpro.com @jlipps · cloudgrey.io
  • 20. Finding elements with greater speed and stability Today’s tips: recent selections from appiumpro.com @jlipps · cloudgrey.io
  • 21. Finding elements with greater speed and stability Using deep links to speed up tests and reduce flakiness Today’s tips: recent selections from appiumpro.com @jlipps · cloudgrey.io
  • 22. Finding elements with greater speed and stability Using deep links to speed up tests and reduce flakiness Testing app upgrade scenarios Today’s tips: recent selections from appiumpro.com @jlipps · cloudgrey.io
  • 23. Finding elements with greater speed and stability Using deep links to speed up tests and reduce flakiness Testing app upgrade scenarios Cross-platform testing best practices Today’s tips: recent selections from appiumpro.com @jlipps · cloudgrey.io
  • 28. Locator Strategy From Support in Appium class name Selenium Yes id Selenium Yes name Selenium Yes xpath Selenium Yes accessibility id Appium Yes -ios predicate string Appium Yes -ios class chain Appium Yes -android uiautomator Appium Yes -ios uiautomation Appium Deprecated css selector Selenium No link text Selenium No partial link text Selenium No tag name Selenium No @jlipps · cloudgrey.io
  • 29. Why use XPath? @jlipps · cloudgrey.io
  • 30. It allows for the formulation of complex queries (for example, using the @contains function) Why use XPath? @jlipps · cloudgrey.io
  • 31. It allows for the formulation of complex queries (for example, using the @contains function) It can identify any element in the UI hierarchy available to Appium Why use XPath? @jlipps · cloudgrey.io
  • 32. It allows for the formulation of complex queries (for example, using the @contains function) It can identify any element in the UI hierarchy available to Appium … Why use XPath? @jlipps · cloudgrey.io
  • 33. It allows for the formulation of complex queries (for example, using the @contains function) It can identify any element in the UI hierarchy available to Appium … that’s about it Why use XPath? @jlipps · cloudgrey.io
  • 34. Why not to use XPath @jlipps · cloudgrey.io
  • 35. Why not to use XPath @jlipps · cloudgrey.io Path-based selectors are brittle
  • 36. Why not to use XPath @jlipps · cloudgrey.io Path-based selectors are brittle It is often expensive to generate an XML representation of the UI
  • 37. Why not to use XPath @jlipps · cloudgrey.io Path-based selectors are brittle It is often expensive to generate an XML representation of the UI It is often expensive to map XML elements found by XPath to native element objects
  • 38. Why not to use XPath @jlipps · cloudgrey.io Path-based selectors are brittle It is often expensive to generate an XML representation of the UI It is often expensive to map XML elements found by XPath to native element objects XPath selectors are not cross-platform
  • 40. Preferred locator strategies @jlipps · cloudgrey.io MobileBy.AccessibilityId Cross-platform locator strategy, will find elements by Accessibility Id (or Name) on iOS, and Content Description on Android
  • 41. Preferred locator strategies @jlipps · cloudgrey.io MobileBy.AccessibilityId Cross-platform locator strategy, will find elements by Accessibility Id (or Name) on iOS, and Content Description on Android By.id Cross-platform locator strategy, will find elements by Id (and a set of other unique identifiers) on iOS, and android:id on Android
  • 43. “Advanced” locator strategies @jlipps · cloudgrey.io MobileBy.iOSNsPredicateString iOS-only locator strategy that allows complex element lookups based on attributes
  • 44. “Advanced” locator strategies @jlipps · cloudgrey.io MobileBy.iOSNsPredicateString iOS-only locator strategy that allows complex element lookups based on attributes MobileBy.iOSClassChain iOS-only locator strategy that allows complex element lookups based on attributes and hierarchy
  • 45. “Advanced” locator strategies @jlipps · cloudgrey.io MobileBy.iOSNsPredicateString iOS-only locator strategy that allows complex element lookups based on attributes MobileBy.iOSClassChain iOS-only locator strategy that allows complex element lookups based on attributes and hierarchy MobileBy.AndroidUIAutomator Android-only locator strategy that allows use the UiSelector API to chain element finding restrictions
  • 46. iOS Predicate String example @jlipps · cloudgrey.io MobileBy.iOSNsPredicateString( "type == 'XCUIElementTypeButton' AND value BEGINSWITH[c] 'foo' AND visible == 1" );
  • 47. iOS Class Chain example @jlipps · cloudgrey.io MobileBy.iOSClassChain( "**/XCUIElementTypeCell[`name BEGINSWITH “C"`]/XCUIElementTypeButton[10]" );
  • 48. Android UiAutomator example @jlipps · cloudgrey.io MobileBy.AndroidUIAutomator( 'new UiSelector().className("ScrollView").getChildByText(new UiSelector().className("android.widget.TextView"), "Tabs")' );
  • 52. @jlipps · cloudgrey.io 30 seconds x 50 tests = 25 minutes
  • 53. Strategies to set up app state instantly @jlipps · cloudgrey.io
  • 54. Android Start the test with custom intents to navigate directly to the right place Use intentAction and optionalIntentArguments parameters to driver.startActivity Strategies to set up app state instantly @jlipps · cloudgrey.io
  • 55. Android Start the test with custom intents to navigate directly to the right place Use intentAction and optionalIntentArguments parameters to driver.startActivity iOS Start the app with custom arguments using Appium capabilities Use the processArguments capability when starting a session Strategies to set up app state instantly @jlipps · cloudgrey.io
  • 56. Android Start the test with custom intents to navigate directly to the right place Use intentAction and optionalIntentArguments parameters to driver.startActivity iOS Start the app with custom arguments using Appium capabilities Use the processArguments capability when starting a session Cross-platform Use deep linking Implement a custom url scheme in your app, then simply use driver.get Strategies to set up app state instantly @jlipps · cloudgrey.io
  • 60. @jlipps · cloudgrey.io 5 seconds x 50 tests = ~4 minutes
  • 62. App upgrades on Android @jlipps · cloudgrey.io
  • 63. Get paths to two versions of your app App upgrades on Android @jlipps · cloudgrey.io
  • 64. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) App upgrades on Android @jlipps · cloudgrey.io
  • 65. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) Install the new app using driver.installApp App upgrades on Android @jlipps · cloudgrey.io
  • 66. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) Install the new app using driver.installApp Trigger the new app to relaunch by using driver.startActivity App upgrades on Android @jlipps · cloudgrey.io
  • 68. App upgrades on iOS @jlipps · cloudgrey.io
  • 69. Get paths to two versions of your app App upgrades on iOS @jlipps · cloudgrey.io
  • 70. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) App upgrades on iOS @jlipps · cloudgrey.io
  • 71. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) Stop the current app using mobile: terminateApp App upgrades on iOS @jlipps · cloudgrey.io
  • 72. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) Stop the current app using mobile: terminateApp Install the new app using mobile: installApp App upgrades on iOS @jlipps · cloudgrey.io
  • 73. Get paths to two versions of your app Start an Appium session using the older version of the app (via the app capability) Stop the current app using mobile: terminateApp Install the new app using mobile: installApp Trigger the new app to relaunch by using mobile: launchApp App upgrades on iOS @jlipps · cloudgrey.io
  • 76. Tips for app development @jlipps · cloudgrey.io
  • 77. Add labels to any element that might be used in testing (i.e., pretty much every element) Tips for app development @jlipps · cloudgrey.io
  • 78. Add labels to any element that might be used in testing (i.e., pretty much every element) Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make them the same! Tips for app development @jlipps · cloudgrey.io
  • 79. Add labels to any element that might be used in testing (i.e., pretty much every element) Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make them the same! As much as possible within the product design requirements, keep user flows the same across apps Tips for app development @jlipps · cloudgrey.io
  • 80. Add labels to any element that might be used in testing (i.e., pretty much every element) Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make them the same! As much as possible within the product design requirements, keep user flows the same across apps Build a test version of your app that has all kinds of state set-up goodies Tips for app development @jlipps · cloudgrey.io
  • 81. Add labels to any element that might be used in testing (i.e., pretty much every element) Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make them the same! As much as possible within the product design requirements, keep user flows the same across apps Build a test version of your app that has all kinds of state set-up goodies Make debug versions of builds Tips for app development @jlipps · cloudgrey.io
  • 82. Add labels to any element that might be used in testing (i.e., pretty much every element) Add labels as “Accessibility ID” on iOS and “Content Description” on Android—and make them the same! As much as possible within the product design requirements, keep user flows the same across apps Build a test version of your app that has all kinds of state set-up goodies Make debug versions of builds iOS Use Wildcard App IDs in Provisioning Profiles (so WebDriverAgent can be built using a custom Bundle ID that works with the profile) Tips for app development @jlipps · cloudgrey.io
  • 83. Tips for the testsuite @jlipps · cloudgrey.io
  • 84. Use a Page Object Model strategy (or similar), to keep differences between platforms encapsulated Tips for the testsuite @jlipps · cloudgrey.io
  • 85. Use a Page Object Model strategy (or similar), to keep differences between platforms encapsulated Test step code should be totally platform-agnostic. Only your runner and your object model should know about platform Tips for the testsuite @jlipps · cloudgrey.io
  • 86. Use a Page Object Model strategy (or similar), to keep differences between platforms encapsulated Test step code should be totally platform-agnostic. Only your runner and your object model should know about platform Avoid XPath in favor of cross-platform locator strategies Tips for the testsuite @jlipps · cloudgrey.io
  • 87. Use a Page Object Model strategy (or similar), to keep differences between platforms encapsulated Test step code should be totally platform-agnostic. Only your runner and your object model should know about platform Avoid XPath in favor of cross-platform locator strategies Dynamically update test name for reports to include platform name or other details, for easier debugging Tips for the testsuite @jlipps · cloudgrey.io
  • 88. @jlipps · cloudgrey.io More tips like these sent by e-mail every week Subscribe at appiumpro.com
  • 89. Thank You! Your free weekly Appium newsletter: appiumpro.com Jonathan Lipps • Founding Principal • Cloud Grey 
 @AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com
  • 90. Questions? Your free weekly Appium newsletter: appiumpro.com Jonathan Lipps • Founding Principal • Cloud Grey 
 @AppiumDevs • @cloudgrey_io • @jlipps • appiumpro.com