This project has been created to demonstrate how a QA Engineer can perform Mobile Testing using Appium + WebDriver.IO More commands and insights about the integration at WebDriverIO Appium docs
We need node js to download Appium beta version & drivers easily.
I Tested the following steps on MAC OS Monterrey:
/usr/libexec/java_home
/usr/libexec/java_home -V
vim ~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home)
source ~/.zshenv
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home
Tested the following steps on MAC OS Monterrey:
* cd /Users/[USER]/Library/Android/sdk
vim ~/.zshenv
export ANDROID_HOME="/Users/[USER]/Library/Android/sdk"
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
source ~/.zshenv
echo $ANDROID_HOME
/Users/[USER]/Library/Android/sdk
adb
xcode-select --install
xcode-select -p
/Applications/Xcode.app/Contents/Developer
brew install carthage
In order to find the correct locators to map elements, you will need to have this tool installed in your computer.
For this project you can use the following configuration:
Server Key | Server Value |
---|---|
Remote Host | 0.0.0.0 |
Remote Port | 4724 |
Remote Path | / |
Android Desired Capabilities(Example)
Desired Capability Key | Desired Capability Value |
---|---|
platformName | Android |
platformVersion | [OS VERSION / IMAGE] |
deviceName | [EMULATED_DEVICE_NAME] |
app | /[PROJECT_PATH]/[APP_NAME].apk |
appium:automationName | UIAutomator2 |
IOS Desired Capabilities(Emulator - App)
Desired Capability Key | Desired Capability Value |
---|---|
platformName | IOS |
platformVersion | [OS VERSION / IMAGE] |
deviceName | [EMULATED_DEVICE_NAME] |
app | /[PROJECT_PATH]/[APP_NAME].app |
appium:automationName | XCUItest |
Appium is an open source test automation framework for use with native, hybrid and mobile web apps. It drives iOS, Android, and Windows apps using the WebDriver protocol.
npm install -g appium@next
Check the appium version using
appium -v
To check if your OS meets the appium requirements, install this node package.
npm install appium-doctor -g
And then use the library:
appium-doctor
If you want Appium to work correctly, you need to download and have the android/ios driver in your system. Run the commands:
appium driver install xcuitest
appium driver install uiautomator2
Check the installed drivers using
appium driver list
Sample Application that you can use:
SauceDemo Hybrid App - React Native) - (Framework is configured to use this one)
Sauce Labs Native Sample Application
WebdriverIO Demo App for iOS and Android
Important Note: For IOS you are going to need an app build to run it in simulators, but an .IPA file to run it in real devices. It required additonal desired capabilities, and you can see which ones in the next article: Appium XCUITest Driver Real Device Setup
1- Run the command to create the package.json & continue with the installation process
npm init wdio .
2- Using the WDIO Configuration Helper select the options you want to select. In my case I decided to use:
3- Add your tests at
'./[yourProject]/specs/**/*.js'
4- Configure the app route at wdio.conf.js
const projectPath = require('path')
const androidAppPath = projectPath.join(process.cwd(), "app/android/Android-MyDemoAppRN.1.3.0.build-244.apk")
const iosAppPath = projectPath.join(process.cwd(),"app/ios/MyRNDemoApp.app");
capabilities: [{
platformName: 'Android',
"appium:device-name": 'Pixel 4 API 30(R)',
"appium:platformVersion": "11.0",
"appium:automationName": "UIAutomator2",
"appium:app": androidAppPath,
// "appium:appWaitActivity": "com.swaglabsmobileapp.MainActivity"(For OLD swaglabs app)
}]
capabilities: [{
platformName: 'IOS',
"appium:device-name": 'iPhone 13 Pro Max',
"appium:platformVersion": "16.0",
"appium:automationName": "XCUItest",
"appium:app": iosAppPath,
}]
npm install --save-dev appium@next
appium driver list
appium driver install xcuitest
appium driver install uiautomator2
npx wdio
if you want to run this project:
1- Install all the system requirements
2- Clone the project
3- Run: npm i
4- Download the android app and place it under app/android or app/IOS
5- npm run wdioIOS/wdioAndroid