TestKase
TestKase
|Docs
AutomateMobile

Mobile apps

Get your access key, point your Appium suite at TestKase, and run your first app test on a real iPhone or Android phone.

Three steps: get your key, point your tests at TestKase, run it.

The address and the access key are the same as Automate Browser. Only the capabilities differ. If your Selenium tests already run here, you are most of the way there.

1. Get your access key

Open API Keys in your dashboard and copy your key. It starts with xyz_.

That key is the only thing that authenticates you.

2. Point your tests at TestKase

One address, the same one Selenium uses:

https://x:<accessKey>@hub.testkase.com/wd/hub

The x is a placeholder for a username we do not check. Your access key is what signs you in.

3. Run your first test

Start with our demo app. Pass farm://app-sample as appium:app and there is nothing to upload.

It is our own build, already on every device. The same id works on iOS, Android, real phones and simulators.

A complete, runnable file in your language:

To drive your own build instead, upload it and use the farm://app- id you get back. Everything else stays the same.

Everything you can ask for — device, OS version, video, network capture, grouping — is on Capabilities.

4. Open your session

App runs appear in Mobile Sessions. Browser runs appear in the main Sessions list with your desktop runs.

Open the newest one to watch it live. Or come back later for the recording, the device log and the Appium log.

Questions

▶Do I need to send appium:automationName?

No. TestKase sets it for you — XCUITest on iOS, UiAutomator2 on Android.

▶Can I send both appium:app and browserName?

No. A session drives one or the other, and sending both is refused.

Sending neither is refused too. Every phone arrives freshly cleaned, sitting on its home screen, so a session with nothing to open would have nothing to test.

▶My client can't put credentials in the URL.

Pass the key as testkase:options.accessKey instead. Both work; the URL is just the more common path.

▶Why createSession and not the usual Builder?

Selenium's Builder needs a string browserName. An app session does not send one.

So it throws Target browser must be a string, but is <undefined> on your own machine, before anything reaches us. createSession skips that check.

Browser sessions are fine. They do set browserName, which is why the browser example above uses the Builder.

▶I use WebdriverIO / an Appium client.

They all work. WebdriverIO wants the address split into parts rather than written as one string. That is its own convention, not ours. The capabilities are identical:

import { remote } from "webdriverio";

const driver = await remote({
  protocol: "https",
  hostname: "hub.testkase.com",
  port: 443,
  path: "/wd/hub",
  user: "x",                       // placeholder — not checked
  key: "xyz_your_access_key",
  capabilities: {
    platformName: "Android",
    "appium:app": "farm://app-sample",
    "testkase:options": { build: "smoke-1", name: "my first mobile test" },
  },
});

await driver.deleteSession();

java-client and appium-python-client take the hub URL as one string, like the example above.