Hybrid App Testing on Real Devices: Native Screens and In-App WebViews

    Your Ionic or Capacitor app is half native and half web page, and each half has its own tools. Test both in one session on a real iPhone or Android phone, with full DevTools on the WebViews inside your app: console, network and DOM. Switch between NATIVE_APP and WEBVIEW in Appium, or let an AI agent do it over MCP.

    Full DevTools on Your WebViews

    Console, network and DOM on the web content inside your app, on real iOS and Android devices. Not only Safari and Chrome pages.

    Native Screens and Web Content in One Session

    Tap through a native screen, land in a WebView, inspect it, and go back. One live session on one real device, with no switching tools.

    One Network Capture, Native and Web

    See the calls from native code and from the web content side by side, and mock a response on the device to test an error state.

    AI Agents Read the Console and DOM

    Over MCP, Claude, Cursor or your own agent reads the console and the DOM of a WebView and drives both the native layer and the web layer.

    Appium Context Switching

    Switch between NATIVE_APP and WEBVIEW contexts, the standard Appium route for hybrid apps. Your existing suite runs against real devices with only the endpoint changed.

    Ionic, Capacitor, Cordova and More

    Ionic, Capacitor and Cordova apps, or any app that embeds web views, are examples of what you can test this way.

    Switch from Native to WebView in Appium

    Standard Appium context switching, on Android and iOS. Only the endpoint changes.

    android.test.js
    import { remote } from 'webdriverio';
    
    const driver = await remote({
      protocol: 'https',
      hostname: '<subdomain>.robotactions.com',
      port: 443,
      path: '/',
      headers: { Authorization: `Bearer ${process.env.RA_API_TOKEN}` },
      capabilities: {
        platformName: 'Android',
        'appium:automationName': 'UiAutomator2',
        'appium:appPackage': 'com.example.myhybridapp',
        'appium:appActivity': '.MainActivity'
      }
    });
    
    // Native screen first
    await driver.$('~open-help').click();
    
    // Find the WebView context and switch to it
    const contexts = await driver.getContexts();
    const webview = contexts.find((c) => String(c).includes('WEBVIEW'));
    await driver.switchContext(webview);
    
    // Standard CSS selectors now work on the web content
    await driver.$('h1.title').waitForDisplayed();
    console.log(await driver.$('h1.title').getText());
    
    // Back to the native layer
    await driver.switchContext('NATIVE_APP');
    await driver.deleteSession();

    Debug the Web Half of Your App

    The free tier gives you one device and needs no credit card. Open your build and inspect a WebView on real hardware.

    Chat with us

    Online

    Before we start

    Share your details so we can follow up with you.