Appium is an open source test automation framework for testing native and hybrid mobile apps. It allows writing tests in any language and on any platform to test the same app submitted to app stores. Appium uses the WebDriver protocol to remotely control apps using UIAutomator on Android and Instruments on iOS. This allows testing apps on real devices and emulators with a single test script. Appium supports platforms include Android, iOS, and mobile web apps and can test apps on a local device or cloud-based services like SauceLabs.
2. whoami?
Been programming forever.
Currently lead developer at Applitools (check out our intro video).
Before:
Vioozer
iCircl
Matrix
Beyond Security
.
Team leader, Developer, Entreprenuer.
5. DEMO
Code for the demo available in:
https://github.com/danielputerman/appium-overview
6. Automating with Appium
Appium was created with 4 design goals in mind:
Test the same app you submit to the market place.
Write tests in any language, on any platform.
Use standard automation specification / api.
Open source.
Soooo Ummmm
16. Show me the code!
Code for available in:
https://github.com/danielputerman/appium-overview
17. Finding elements
Appium translates webdriver find commands to the relevant
automation API provided by each platform:
Four find methods available
name: The text on the element / accessibility identifier
tag_name: the type of an element, e.g., button, textfield etc.
Mapping:
https://github.com/appium/appium/blob/master/lib/devices/ios/uiauto/lib/mechanic.js
#L29
Xpath: Using the element hierarchy.
ID: Available for Android when running with selendroid as device.
18. Finding elements by name
driver.find_element(:name, New note)
Searches label text / accessibility fields for each platform (contentDescription on android, name on iOS)
19. Finding elements by tag name
driver.find_element(:tag_name, textfield)
Searches for an element of the specified type.
20. Finding elements by xpath
@driver.find_element(:xpath, '//text[contains(@value, another)]')
@driver.find_element(:xpath, '//text[last()]')
21. There are limitations, of course!
Instruments is a singleton
No parallel testing of iOS apps on the same OSX instance.
Limited VM scalability.
Appium is a relatively new product and is in the process of maturing.
Documentation is not bad, but can be improved quite a bit.
Error messages (especially for iOS) can be sometimes hard to figure
out.
22. The future
Mobile Json Wire Protocol (part of
Selenium 3)
https://code.google.com/p/selenium/source/
browse/spec-draft.md?repo=mobile
Joint effort of Appium, Facebook, Ebay and Mozilla
Appium would implement the protocol + backword
compatibility.
Additional platforms
Appium Doctor
Advanced gestures
23. Tips I: Appium setup
Pay attention to the requirements!
Node version (>= 0.8)
Android API >= 17 (i.e. 4.2.2 and above)
Windows is still considered beta, though seems to be working fine
iOS
Mac OS X 10.7 or higher, 10.8.4 recommended
XCode >= 4.6.3
Apple Developer Tools (iPhone simulator SDK, command line tools)
For Mac, make sure you use the XCode version matching the iOS
version you wish to test
https://github.com/appium/appium/blob/master/docs/running-on-osx.md#testing-against-multiple-ios-sdks
24. Tips II: running Appium
Desired capabilities, Desired capabilities, Desired capabilities!
On linux/Mac use sudo E (or sudo sE) to have the environment
variables available when Appium is run.
Notice the IP you listen to when starting Appium (the -a parameter):
127.0.0.1 will only listen to itself and localhost.
0.0.0.0 will listen to itself, localhost, 127.0.0.1 and the actual computer IP(s).
Parallel testing?
Run multiple Appium servers, each listening to a different port, and to a
specific device using the U option.
Use full-reset when running on Android, so tests will start from a
clean environment.
25. FAQ
Q: Can I automate webview applications?
A: Definitely.
1.
2.
3.
4.
If youre using Android, the device in the desired capabilities should be set to
selendroid.
Switch to webview: driver.switch_to_window(WEBVIEW)
Automate as standard web.
If required: driver.switch_to_window(NATIVE)
Q: What about an application which activates another application? (FB, maps etc.)
A: Depends
For Android, not a problem.
For iOS, switching to a different application loses the context in which the automation run.
You need to create a new session when coming back from the external application.
https://groups.google.com/forum/#!topic/appium-discuss/38wLkiS_7L0
26. FAQ Cont.
Q: Can I automate an application already installed on a device (without having the app file
on my computer)?
A: Yes and no
Android: You can, either for simulator or for real device (just set app-package and app-activity).
iOS: No problem if you use a simulator (use bundleId as the value to the app parameter), but for a
real device you must have the app file on your computer.
28. Additional resources
Appium website
Home: http://appium.io/
Documentation: http://appium.io/getting-started.html
Appium forum on google. If you have a question or a problem, this is
the place to go.
https://groups.google.com/forum/#!forum/appium-discuss
Code for the demos
https://github.com/danielputerman/appium-overview