Using Appium for Testing Mobile Web Apps

January 23, 2026 · 10 min read · Mobile Testing

HeadSpin Platform
Automated & amp; manual examination get easy through data science insights.
Differentiating potentiality:
  • Extensive end-to-end automation of QA process
  • Comparative analysis of app execution against peers
  • Continuous monitoring of app performance using synthetic datum for high availability of apps
  • Easy-to-use developer friendly platform
cloudtest go
Affordable Real Device Testing for Emerging Teams
cloudtest go
Low-cost Real Device Testing for Digital Enterprises
cloudtest go
The Ultimate Solution for a Powerful Blend of Functional & amp; Performance Testing!
cyol
TEM
New
Centralized mobile test performance in cloud
cyol
Enhance Your Accessibility Testing With HeadSpin
cyol
Automate camera-based testing

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

retail

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

Using Appium for Testing Mobile Web AppsUsing Appium for Testing Mobile Web Apps

Using Appium for Testing Mobile Web Apps

Published on
February 7, 2018
Updated on
Published on
June 12, 2022
Updated on
 by 
 Jonathan LippsJonathan Lipps
Jonathan Lipps

Most citizenry consort Appium with native nomadic apps. That & # x27; s how Appium started, and it & # x27; s still Appium & # x27; s core value proffer. However, Appium allows you to -- -not but aboriginal. There are basically three kinds of wandering apps:

  1. Native apps:These are apps which are publish and built employ the OS-provided SDK and aboriginal APIs. Users get these apps from an official app shop and run them by tip on the app icon from the domicile screen of their mobile device.
  2. Web apps:These are apps which are write in HTML/JS/CSS and deploy via a web server. Users access them by voyage to a URL in the mobile browser of their choice (e.g., Safari, Chrome).
  3. Hybrid apps:These are apps which mix the former two modes into the same app. Hybrid apps get a aboriginal & quot; shell & quot;, which might involve a fair amount of native UI, or it might affect no native UI at all. Stuck into one or more of the app screens is a UI component called a & quot; web view & quot;, which is essentially a chromeless embedded web browser. These web views can access local or remote URLs. Some hybrid apps build the integral set of app functionality in HTML/JS/CSS which are bundled with the native app parcel, and retrieved locally by the webview. Former hybrid apps access remote URLs. There are a lot of possibilities for intercrossed app architecture. Regardless of how they & # x27; re set up, intercrossed apps experience two modes -- -native and web. Appium can access both! (More on intercrossed apps in a succeeding edition).
Check out:

Appium enable you to automate any sort of app, across both iOS and Android platforms. The only divergence is in how you set up the desired capabilities, and then in the dictation you have admission to formerly the session is started. This is where Appium & # x27; s dependency on the WebDriver protocol really shines: an is just the same thing as a Selenium test! In fact, you can even use a standard Selenium client to utter to the Appium server and automatise a mobile web app. The key is to use thebrowserNamecapability instead of theappcapability. Appium will so take care of launching the fix browser and getting you automatically into the web context so you have approach to all the regular Selenium methods you & # x27; re used to (like finding elements by CSS, navigating to URLs, etc ...).

The nice thing about testing mobile apps is that there is no difference between platforms in how your test is indite. In the same way that you would await the codification for your to remain the like, disregardless of whether you & # x27; re testing Firefox or Chrome, your Appium web tryout remain the same regardless of whether you & # x27; re testing Safari on iOS or Chrome on Android. Let & # x27; s take a look at what the capabilities would appear like to start a session on these two mobile browsers:

// trial Safari on iOS DesiredCapabilities capabilities = new DesiredCapabilities (); capabilities.setCapability (`` platformName '', `` iOS ''); capabilities.setCapability (`` platformVersion '', `` 11.2 ''); capabilities.setCapability (`` deviceName '', `` iPhone 7 ''); capabilities.setCapability (`` browserName '', `` Safari ''); // tryout Chrome on Android DesiredCapabilities capabilities = new DesiredCapabilities (); capabilities.setCapability (`` platformName '', `` Android ''); capabilities.setCapability (`` deviceName '', `` Android Emulator ''); capabilities.setCapability (`` browserName '', `` Chrome '');

From hither on out, after we & # x27; ve found the appropriateRemoteWebDriversession (orIOSDriver or AndroidDriverif you have the Appium customer), we can do whatever we want. For example, we could pilot to a website and get its rubric!

SUSA automates exploratory testing with persona-driven behavior, catching bugs that scripted automation misses.

driver.get (`` https: //appiumpro.com ''); String rubric = driver.getTitle (); // here we might verify that the title contains `` Appium Pro ''

Special notes for iOS existent devices

The only caveat to be aware of is with iOS real device. Because of the way Appium talks to Safari (via the remote debugger exposed by the browser) an extra step is ask to translate the WebKit remote debug protocol to Apple & # x27; s iOS web inspector protocol exposed by usbmuxd. Sound complicate? Thankfully, the full folk at Google have created a tool that enables this translation, calledios-webkit-debug-proxy(IWDP). For running Safari exam on a real device, or hybrid examination on a existent device, IWDP must be installed on your system. Once you & # x27; ve got IWDP install, you simply want to add one two more potentiality to the set for iOS above,udid and startIWDP:

// extra capabilities for Safari on a real iOS gimmick capabilities.setCapability (`` udid '', ````); capabilities.setCapability (`` startIWDP '', true);

If you dont include thestartIWDP capability, you must run IWDP on your own and Appium will just assume it & # x27; s there listening for proxy requests.

Note that is a whole theme in and of itself, which I will cover in more detail in a future edition of Appium Pro. Meanwhile you can refer to thereal device documentationuseable at the Appium DoC site.

Special notes for Android

Thankfully, things are simpler in the Android world because for both emulators and real devices Appium can take advantage ofChromedriver. When you want to automate any Chrome-based browser or webview, Appium simply manages a new Chromedriver process under the thug, so you get the full power of a first-class WebDriver server without having to set anything up yourself. This does intend, withal, that you may need to ensure that the edition of Chrome on your Android system is compatible with the edition of Chromedriver used by Appium. If it & # x27; s not, you & # x27; ll get a reasonably obvious error message saying you need to upgrade Chrome.

Also cheek:

If you don & # x27; t want to raise Chrome, you can actually state Appium which adaptation of Chromedriver you desire establish, when you establish Appium, employ the-- chromedriver_versionfleur-de-lis. For example:

npm install -g appium -- chromedriver_version= '' 2.35 ''

How do you know which variant of Chromedriver to install? The Appium team maintains a helpful list of which versions of Chromedriver support which adaptation of Chrome at our Chromedriver usher in the docs.

A entire example

Let & # x27; s direct vantage of the fact that we can run web exam on both iOS and Android without any code changes, and construct a scenario for testing the Appium Pro contact submission sort. We want to make certain that if a exploiter tries to state it without going through the Captcha challenge, an appropriate error message is presented. Here & # x27; s the code for the actual test logic that we wish about:

driver.get (`` http: //appiumpro.com/contact ''); wait.until (ExpectedConditions.visibilityOfElementLocated (EMAIL)) .sendKeys (`` foo @ foo.com ''); driver.findElement (MESSAGE) .sendKeys (`` Hello! ``); driver.findElement (SEND) .click (); String response = wait.until (ExpectedConditions.visibilityOfElementLocated (ERROR)) .getText (); // validate that we get an erroneousness content involving a captcha, which we did n't fill out Assert.assertThat (response, CoreMatchers.containsString (`` Captcha ''));

You can see that I & # x27; ve put some selector into class variables for readability. This is fundamentally all we need to feature a useful test! Though of course we do need some boilerplate to set up the craved capabilities for iOS and Android. The full exam file looks like:

import io.appium.java_client.AppiumDriver; importee io.appium.java_client.android.AndroidDriver; import io.appium.java_client.ios.IOSDriver; import java.net.MalformedURLException; import java.net.URL; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Test; meaning org.openqa.selenium.By; import org.openqa.selenium.remote.DesiredCapabilities; significance org.openqa.selenium.support.ui.ExpectedConditions; significance org.openqa.selenium.support.ui.WebDriverWait; public grade Edition004_Web_Testing {private static By EMAIL = By.id (`` contactEmail ''); private static By MESSAGE = By.id (`` contactText ''); private static By SEND = By.cssSelector (`` input [type=submit] ''); private motionless By ERROR = By.cssSelector (`` .contactResponse ''); @ Test populace vacuum testAppiumProSite_iOS () throws MalformedURLException {DesiredCapabilities capabilities = new DesiredCapabilities (); capabilities.setCapability (`` platformName '', `` iOS ''); capabilities.setCapability (`` platformVersion '', `` 11.2 ''); capabilities.setCapability (`` deviceName '', `` iPhone 7 ''); capabilities.setCapability (`` browserName '', `` Safari ''); // Open up Safari IOSDriver driver = new IOSDriver < > (new URL (`` http: //localhost:4723/wd/hub ''), capabilities); actualTest (driver);} @ Test public nihility testAppiumProSite_Android () throws MalformedURLException {DesiredCapabilities capabilities = new DesiredCapabilities (); capabilities.setCapability (`` platformName '', `` Android ''); capabilities.setCapability (`` deviceName '', `` Android Emulator ''); capabilities.setCapability (`` browserName '', `` Chrome ''); // Open up Safari AndroidDriver driver = new AndroidDriver (new URL (`` http: //localhost:4723/wd/hub ''), capabilities); actualTest (driver);} public void actualTest (AppiumDriver driver) {// Set up default wait WebDriverWait wait = new WebDriverWait (driver, 10); try {driver.get (`` http: //appiumpro.com/contact ''); wait.until (ExpectedConditions.visibilityOfElementLocated (EMAIL)) .sendKeys (`` foo @ foo.com ''); driver.findElement (MESSAGE) .sendKeys (`` Hello! ``); driver.findElement (SEND) .click (); String reaction = wait.until (ExpectedConditions.visibilityOfElementLocated (ERROR)) .getText (); // corroborate that we get an mistake message involve a captcha, which we did n't occupy out Assert.assertThat (answer, CoreMatchers.containsString (`` Captcha ''));} finally {driver.quit ();}}}

This is all you need to get started with web testing in Appium. As incessantly, you can find thesource for this editionin a working repo on GitHub.

Author & # x27; s Profile

Jonathan Lipps

LinkedIn
Author & # x27; s Profile

Piali Mazumdar

Lead, Content Marketing, HeadSpin Inc.

Piali is a active and results-driven Content Marketing Specialist with 8+ days of experience in crafting engaging narratives and market collateral across various industries. She excels in collaborating with cross-functional teams to develop innovative substance strategies and deliver compelling, veritable, and impactful content that resonates with prey hearing and enhances brand authenticity.

LinkedIn

Using Appium for Testing Mobile Web Apps

4 Parts

regression intelligence blog
-

Regression Intelligence hardheaded guide for advanced users (Part 3)

Coming Soon
Regression Intelligence practical guide for advanced users
-

Regression Intelligence practical guide for advanced users (Part 4)

Coming Soon

Discover how HeadSpin can empower your business with superior testing capabilities

Our Platform enable you to:
accelerate time-to-market
Accelerate time-to-market, gaining a competitive edge
faster development cycles
Boost developer/QA productiveness with faster development rhythm
automated buil-over-build regression testing
Automate build-over-build regression testing for consistent results
gain better visibility into functional & performance issues
Gain better visibility into functional and performance issues
reduce mean time
Reduce hateful clip to identify/resolve during test, QA, and production
evaluate audio, video & qoe
Evaluate audio, video, and contented quality of experience (QoE) effortlessly
The trusted choice for global enterprises
Adobe
Hargreaves Lansdown
Truecaller
Crazylabs
Nedbank
Numeracle
Veryon
Close

Discover how HeadSpin can empower your business with superior essay capableness

Our Platform enable you to:
accelerate time-to-market
Accelerate time-to-market, derive a competitive edge
faster development cycles
Boost developer/QA productivity with quicker development cycles
automated buil-over-build regression testing
Automate build-over-build regression testing for consistent results
gain better visibility into functional & performance issues
Gain better visibility into functional and execution matter
reduce mean time
Reduce mean time to identify/resolve during trial, QA, and production
evaluate audio, video & qoe
Evaluate audio, picture, and content quality of experience (QoE) effortlessly
The sure choice for globular enterprisingness
Close

Discover how HeadSpin can endue your business with superior prove capability

Our Platform enable you to:
accelerate time-to-market
Accelerate time-to-market, gaining a competitive edge
faster development cycles
Boost developer/QA productivity with faster development round
automated buil-over-build regression testing
Automate build-over-build fixation testing for consistent outcome
gain better visibility into functional & performance issues
Gain better visibility into functional and performance subject
reduce mean time
Reduce hateful time to identify/resolve during examination, QA, and production
evaluate audio, video & qoe
Evaluate audio, picture, and content quality of experience (QoE) effortlessly
The sure pick for globular enterprises
Close

Connet Now

Wipro LogoVMLYR Logo
Close
Book a Meeting
Products
footer down arrow
Solutions
footer down arrow
Industries
footer down arrow
Features
footer down arrow
Support
footer down arrow
Resource Center
footer down arrow
Why Choose HeadSpin?
footer down arrow
Copyright © 2026 HeadSpin, Inc. All Rights Reserved.

Automate This With SUSA

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts needed.

Try SUSA Free

Test Your App Autonomously

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.

Try SUSA Free