Appium Lock Device Example Java
This is the first article from the new series dedicated to the mobile testing using Appium test automation framework. Here, I am going to show you how to configure your machine to test Android applications- prerequisite installations and setup of emulators. After that, you will find how to start your application on the emulator and perform actions on it.
What Is Appium?
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. It is the "standard" for mobile test automation.
Machine Setup
1. InstallJava Development Kit (JDK) version 7 or above
(version 8 recommended in order for UI Automation Viewer to work)
2. Set JAVA_HOME environmental variable to where Java JDK is installed
Open in explorer –Control Panel\System and Security\System then click Advanced system settings. Click Environmental Variables.
3. AddJava JDK bin folder to the end ofPath environmental variable
4. Install the Android Studio to install the Android SDK at its default location if it is not already installed: C:\Program Files (x86)\Android\android-sdk – follow the following guide
5. Create a virtual device with the Android Virtual Device Manager
7. Install Appium from the command line (skip if you install Appium Desktop)
npm install -g appium
8. Install Appium Desktop (optional)
Find Android App Info
Install APK to Virtual Device
ADB, Android Debug Bridge, is a command-line utility included with Google's Android SDK. ADB can control your device over USB from a computer, copy files back and forth, install and uninstall apps, run shell commands, and more.
First, start the ADB shell using the command –adb shell.
Before automating your app, you may need to expect it and find some info about it. So, you need to install it on your virtual device. To do so, open the command line and execute the following command.
adb install pathToYourApk/yourTestApp.apk
To find the app package and current activity. Open your application on the virtual device and navigate to the desired view. Then open adb shell and use the following command.
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
Start Android App in Emulator
You need to make sure that theAppium server is started and listening on port 4723.
private static AndroidDriver<AndroidElement> driver; | |
@BeforeClass | |
public void classInit() throws URISyntaxException, MalformedURLException { | |
URL testAppUrl = getClass().getClassLoader().getResource( "ApiDemos.apk" ); | |
File testAppFile = Paths .get(Objects .requireNonNull(testAppUrl).toURI()).toFile(); | |
String testAppPath = testAppFile.getAbsolutePath(); | |
var desiredCaps = new DesiredCapabilities(); | |
desiredCaps.setCapability(MobileCapabilityType .DEVICE_NAME, "android25-test" ); | |
desiredCaps.setCapability(AndroidMobileCapabilityType .APP_PACKAGE, "com.example.android.apis" ); | |
desiredCaps.setCapability(MobileCapabilityType .PLATFORM_NAME, "Android" ); | |
desiredCaps.setCapability(MobileCapabilityType .PLATFORM_VERSION, "7.1" ); | |
desiredCaps.setCapability(AndroidMobileCapabilityType .APP_ACTIVITY, ".view.Controls1" ); | |
desiredCaps.setCapability(MobileCapabilityType .APP, testAppPath); | |
driver = new AndroidDriver<AndroidElement>(new URL( "http://127.0.0.1:4723/wd/hub" ), desiredCaps); | |
driver.closeApp(); | |
} | |
@BeforeMethod | |
public void testInit() { | |
if (driver != null) { | |
driver.launchApp(); | |
driver.startActivity(new Activity( "com.example.android.apis" , ".view.Controls1" )); | |
} | |
} | |
@AfterMethod | |
public void testCleanup() { | |
if (driver != null) { | |
driver.closeApp(); | |
} | |
} |
After the driver is initialised we closed if the app is open. Then before each test, we launch the app and open the desired activity.
Start Appium Service
Instead of starting Appium server manually, we can start it from code.
appiumLocalService = new AppiumServiceBuilder().usingAnyFreePort().build(); | |
appiumLocalService.start(); |
Get Path to Test App
The apk file is copied from the Resources folder to the compiled binaries. This is how we get the path.
URL testAppUrl = getClass().getClassLoader().getResource( "ApiDemos.apk" ); | |
File testAppFile = Paths .get(Objects .requireNonNull(testAppUrl).toURI()).toFile(); | |
String testAppPath = testAppFile.getAbsolutePath(); |
Initialize Desired Capabilities
URL testAppUrl = getClass().getClassLoader().getResource( "ApiDemos.apk" ); | |
File testAppFile = Paths .get(Objects .requireNonNull(testAppUrl).toURI()).toFile(); | |
String testAppPath = testAppFile.getAbsolutePath(); | |
var desiredCaps = new DesiredCapabilities(); | |
desiredCaps.setCapability(MobileCapabilityType .DEVICE_NAME, "android25-test" ); | |
desiredCaps.setCapability(AndroidMobileCapabilityType .APP_PACKAGE, "com.example.android.apis" ); | |
desiredCaps.setCapability(MobileCapabilityType .PLATFORM_NAME, "Android" ); | |
desiredCaps.setCapability(MobileCapabilityType .PLATFORM_VERSION, "7.1" ); | |
desiredCaps.setCapability(AndroidMobileCapabilityType .APP_ACTIVITY, ".view.Controls1" ); | |
desiredCaps.setCapability(MobileCapabilityType .APP, testAppPath); |
You need to set the device name to the name of your emulator. In the previous section, I showed you how to find the app package and app activity. If you want to test a native or hybrid app, you have to set the app path. And lastly, add the platform name and version.
Once you have initialised the desired capabilities properly you pass them to the AndroidDriver constructor. If you don't want to start Appium server from code, there is a constructor for passing URL.
Find Android Locators
Using the Android SDK UI Automator Viewer, you can find the elements you are looking for. You can find it in the folder C:\Program Files (x86)\Android\android-sdk\tools\bin. Launch the following file –uiautomatorviewer.bat. Then click on the Device Screenshot and an image of the test app will appear.
Find Android Locators with Appium Desktop
Appium provides you with a neat tool that allows you to find the elements you're looking for. With Appium Desktop you can find any item and its locators by either clicking the element on the screenshot image or locating it in the source tree.
After launching Appium Desktop and starting a session, you can locate any element in the source.
Locating Elements with Appium
- By ID
AndroidElement button = driver.findElementById( "com.example.android.apis:id/button" ); |
- By Class
AndroidElement checkBox = driver.findElementByClassName( "android.widget.CheckBox" ); |
- By XPath
AndroidElement secondButton = driver.findElementByXPath( "//*[@resource-id='com.example.android.apis:id/button']" ); |
- By AndroidUIAutomator
AndroidElement thirdButton = driver.findElementByAndroidUIAutomator( "new UiSelector().textContains(\"BUTTO\");" ); |
Locate Elements inside Parent
@Test | |
public void locatingElementsInsideAnotherElementTest() { | |
var mainElement = driver.findElementById( "android:id/content" ); | |
var button = mainElement.findElementById( "com.example.android.apis:id/button" ); | |
button.click(); | |
var checkBox = mainElement.findElementByClassName( "android.widget.CheckBox" ); | |
checkBox.click(); | |
var secondButton = mainElement.findElementByXPath( "//*[@resource-id='com.example.android.apis:id/button']" ); | |
secondButton.click(); | |
var thirdButton = mainElement.findElementByAndroidUIAutomator( "new UiSelector().textContains(\"BUTTO\");" ); | |
thirdButton.click(); | |
} |
Gesture Actions in Appium
Swipe
@Test | |
public void swipeTest() { | |
driver.startActivity(new Activity( "com.example.android.apis" , ".graphics.FingerPaint" )); | |
TouchAction touchAction = new TouchAction(driver); | |
AndroidElement element = driver.findElementById( "android:id/content" ); | |
Point point = element.getLocation(); | |
Dimension size = element.getSize(); | |
touchAction.press(PointOption.point(point.getX() + 5, point.getY() + 5)) | |
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) | |
.moveTo(PointOption.point(point.getX() + size.getWidth() - 5, point.getY() + size.getHeight() - 5)) | |
.release() | |
.perform(); | |
} |
Online Training
-
C#
-
NON-FUNCTIONAL
Web Test Automation Fundamentals
LEVEL: 1
- Java Level 1
- Java Unit Testing Fundamentals
- Source Control Introduction
- Selenium WebDriver- Getting Started
- Setup Continuous Integration Job
Duration: 20 hours
4 hour per day
-50% coupon code:
Test Automation Advanced
LEVEL: 2
- Java Level 2
- WebDriver Level 2
- Appium Level 1
- WinAppDriver Level 1
- WebDriver in Docker and Cloud
- Test Reporting Solutions and Frameworks
- Behavior-Driven Development
Duration: 30 hours
4 hour per day
-20% coupon code:
Enterprise Test Automation Framework
LEVEL: 3 (Master Class)
After discussing the core characteristics, we will start writing the core feature piece by piece.
We will continuously elaborate on why we design the code the way it is and look into different designs and compare them. You will have exercises to finish a particular part or extend it further along with discussing design patterns and best practices in programming.
Duration: 30 hours
4 hour per day
-20% coupon code:
Web Test Automation Fundamentals
LEVEL: 1
- C# Level 1
- C# Unit Testing Fundamentals
- Source Control Introduction
- Selenium WebDriver- Getting Started
- Setup Continuous Integration Job
Duration: 20 hours
4 hour per day
-50% coupon code:
Test Automation Advanced
LEVEL: 2
- C# Level 2
- WebDriver Level 2
- Appium Level 1
- WinAppDriver Level 1
- WebDriver in Docker and Cloud
- Test Reporting Solutions and Frameworks
- Behavior-Driven Development- SpecFlow
Duration: 30 hours
4 hour per day
-20% coupon code:
Enterprise Test Automation Framework
LEVEL: 3 (Master Class)
After discussing the core characteristics, we will start writing the core feature piece by piece.
We will continuously elaborate on why we design the code the way it is and look into different designs and compare them. You will have exercises to finish a particular part or extend it further along with discussing design patterns and best practices in programming.
Duration: 30 hours
4 hour per day
-20% coupon code:
Performance Testing
- Fundamentals of Performance Testing
- Fundamentals of network technologie
- Performance testing with WebPageTest
- Performance test execution and automation
- Introduction to Jmeter
- Introduction to performance monitoring and tuning
- Performance testing in the cloud
Duration: 24 hours
4 hour per day
-30% coupon code:
Appium Series
Source: https://www.automatetheplanet.com/getting-started-with-appium-for-android-java-on-windows-in-10-minutes/
0 Response to "Appium Lock Device Example Java"
Post a Comment