Welcome to a our addition to our How..To Series. The How..To series is designed to help you with you specific testing tool problems. Each month a new post will be published with a guide on a specific problem that you might need help with. On the second Tuesday of each month, Anuja will publish a post on a particular aspect of Appium. This post examines testing webviews with Appium. If you have suggestion of any future posts, please comment below and we will add them to the list.
There are two types of apps Native Apps and Hybrid apps. Native app means apps developed using native APIs and Hybrid apps means apps containing Web Views. As we know Appium supports Webviews and hence we can test Hybrid Applications using Appium very effectively. Web View is nothing but an Android/iOS application opening a web page inside their application.Before we start with our test case we need to know how to inspect HTML code of an Webview, How to Locate web elements and how to perform actions on web elements.
How to Inspect Webviews in Chrome Browser –
1. Go to Chrome browser
2. Type this url -chrome://inspect/devices#devices
3. click on any url listed on web page.
4. Then click on any UI element and you will get associated html source code which you can use to write your own xpath.
How To Locate Webview Elements
Locating Webview elements is very easy as because it has same APIs like findElementById(). Hence we can use find elements by id,class name,xpath etc to locate our web elements before performing any kind of actions on it.
How to Switch To Webview
Check out the code sample given below which switched to web view and then test cases perform actions mentioned in your code on directly on the Web Views.
// Switch to WebView
Set<String> contextNames = driver.getContextHandles();
System.out.println(contextNames.size());
for (String contextName : contextNames) {
System.out.println(contextName);
if (contextName.contains("WEBVIEW")){
driver.context(contextName);
}
Sample Webview Test Case Example –
Consider you have an app which has web view for Registration. Where you need to perform below test case
1. Check web view displays text message “Welcome To My Page”
2. Enter Username
3. Enter Password
4. Click on Submit
5. Assert that text message saying “Successfully Registered” is Displayed
In the below test case we need to set up desired capabilities for test case execution. Then inside you webview test case add the code to switch to Web View and then start with your test case code. Before and After Test are JUnit Annotations used to define the flow of execution.
public class TestWebViews
{
@Before
public void testCaseSetup()throws Exception
{
DesiredCapabilities cap=new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android device");
cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "4000");
cap.setCapability(MobileCapabilityType.APP, "c://apk//sample.apk");
driver=new AndroidDriver<MobileElement>("http://127.0.0.1:4444/wd/hub",cap);
}
@Test public void testWebViews()throws Exception { // Switch to WebView Set<String> contextNames = driver.getContextHandles(); System.out.println(contextNames.size()); for (String contextName : contextNames) { System.out.println(contextName); if (contextName.contains("WEBVIEW")){ driver.context(contextName); } } // check WELCOME text is present Assert.assertEquals("Welcome To My Page", driver.findElement(By.id("welcome_text")).getText()); //Check UI elements text boxes and buttons are present on the page Assert.assertTrue(driver.findElementById("email_edit").isDisplayed()); Assert.assertTrue(driver.findElementById("password_edit").isDisplayed()); Assert.assertTrue(driver.findElementById("submit_button").isDisplayed()); //enter email id and password driver.findElementById("email_edit").sendKeys("[email protected]"); driver.findElementById("password_edit").sendKeys("12345"); // /click on submit button driver.findElementById("submit_button").click(); //Explicit wait for submission Thread.sleep(3000); //Check for successful submission Assert.assertEquals("Successfully Registered",driver.findElementById("display_text")); }
About The Author
Anuja works as QA Engineer. Anuja started her blog to share her experience regarding automation testing for Mobile Applications & Web Applications. Anuja has used various tools like Selenium,Appium, Selendroid, Espresso, Robitium and UI Automator for Android App Testing. As a tester she has spent a lot of time in the setting up of various tools and learning how to write different functional test cases. Even though it was simple to understand but finding a right tutorial among many confusing ones can make it difficult. So she decided to share her knowledge in very simple manner for the benefit of other testers.