- appium/appium - Docker Image to run appium tests on real android devices.
- To execute in android emulator's please visit docker-android
-
Why is this approach needed at first place?
- Helps in quick & easier setup of automation environment for appium + android
- Without this approach, you'll need to do each of the automation setup steps manually; which can be slow and error prone
- Refer to Selenium Conference Youtube video for more details
-
Make sure you have latest docker installed on mac.
$ docker-machine --version $ docker-machine version 0.10.0, build 76ed2a6
-
Create a docker-machine as follows
$ docker-machine create --driver virtualbox appium-test-machine
-
Enable USB in created docker-machine
$ docker-machine stop appium-test-machine $ vboxmanage modifyvm appium-test-machine --usb on --usbehci on $ docker-machine start appium-test-machine
Note: You need to install Extension Pack depends on your virtualbox version, in case you get an Error "Implementation of the USB 2.0 controller not found"
-
Open Virtual box, move to appium-test-machine created, select USB and add Android device and Host Controller.
-
SSH into the docker machine created
$ docker-machine ssh appium-test-machine
-
Run the docker image
$ docker run --privileged -d -p 4723:4723 -v /dev/bus/usb:/dev/bus/usb --name container-appium appium/appium
-
Plug in devices after container is running; otherwise it will shows nothing.
-
Run following command to verify adb devices can detect the connected android device.
$ docker exec -it container-appium bash "adb devices"
-
Run UI Test with following test configuration
Push the apk file into the container $ docker cp /Users/loacl-macosx-path-to-apk/app-debug.apk container-appium:/opt Desired Capabilities: private void androidSetup() throws MalformedURLException { caps.setCapability("deviceName", "Android"); caps.setCapability("app", "/opt/app-debug.apk"); //Get the IP Address of boot2docker //docker inspect $(docker ps -q) | grep IPA driver = new AndroidDriver<MobileElement>(new URL("http://192.168.99.100:32769/wd/hub"), caps); }
Appium-Docker-Android can be connected with Android devices by Air.
To do that you need to configure android device, according to official manual
Then run docker container with following parameters:
- REMOTE_ADB=True
- ANDROID_DEVICES=<android_device_host>:<android_device_port> [,<android_device_host>:<android_device_port>]
$ docker run -d -p 4723:4723 -e REMOTE_ADB=True -e ANDROID_DEVICES=192.168.0.5:5555,192.168.0.6:5555
Appium-Docker-Android can be connected with selenium grid by passing following parameters:
- CONNECT_TO_GRID=True
- APPIUM_HOST=<ip_address_of_appium_server>
- APPIUM_PORT=<port_of_appium_server>
- SELENIUM_HOST=<ip_address_of_selenium_hub>
- SELENIUM_PORT=<port_of_selenium_hub>
$ docker run --privileged -d -p 4723:4723 -e CONNECT_TO_GRID=True -e APPIUM_HOST="127.0.0.1" -e APPIUM_PORT=4723 -e SELENIUM_HOST="172.17.0.1" -e SELENIUM_PORT=4444 -v /dev/bus/usb:/dev/bus/usb --name container-appium appium/appium
There is an example of compose file to simulate the connection between selenium hub and appium server mit connected device(s) in docker solution.
$ docker-compose up -d