Testing Mobile App with Appium & Webdriverio: "No Route Found for /Session"
I Want to Set up the Process of Automated Testing of Mobile Applications for Android and iOS Platforms (React Native). for This I Use Appium and Webdriverio...
I want to set up the process of automated testing of mobile applications for Android and iOS platforms (React Native) . For this I use Appium and WebdriverIO. As an example, I am using existing appium-boilerplate codebase and a ready-made application for running tests. I run the application in the Android emulator. Basic settings are presented below.
1. Appium
2. WebdriverIO
wdio.shared.conf.js
exports.config = {
// ====================
// Runner and framework
// Configuration
// ====================
runner: 'local',
framework: 'jasmine',
jasmineNodeOpts: {
// Updated the timeout to 30 seconds due to possible longer appium calls
// When using XPATH
defaultTimeoutInterval: 90000,
helpers: [require.resolve('@babel/register')],
},
sync: true,
logLevel: 'silent',
deprecationWarnings: true,
bail: 0,
baseUrl: '
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
reporters: ['spec'],
// ====================
// Appium Configuration
// ====================
services: [
[
'appium',
{
// For options see
//
args: {
// Auto download ChromeDriver
relaxedSecurity: true,
// chromedriverAutodownload: true,
// For more arguments see
//
},
command: 'appium',
},
],
],
port: 4723,
};
wdio.android.app.conf.js.
const { join } = require('path');
const { config } = require('./wdio.shared.conf');
// ============
// Specs
// ============
config.specs = [
'./tests/specs/**/app*.spec.js',
];
// ============
// Capabilities
// ============
// For all capabilities please check
//
config.capabilities = [
{
// The defaults you need to have in your config
platformName: 'Android',
maxInstances: 1,
// For W3C the appium capabilities need to have an extension prefix
//
// This is `appium:` for all Appium Capabilities which can be found here
'appium:udid': 'emulator-5554',
'appium:deviceName': 'Android SDK build for x86_64',
'appium:platformVersion': '10.0',
'appium:orientation': 'PORTRAIT',
// `automationName` will be mandatory, see
//
'appium:automationName': 'Appium',
// The path to the app
'appium:app': join(process.cwd(), './apps/Android-NativeDemoApp-0.2.1.apk'),
// Read the reset strategies very well, they differ per platform, see
//
'appium:noReset': true,
'appium:newCommandTimeout': 240,
},
];
exports.config = config;
3. Steps
First I open Android emulator and start the Appium server:
Then I use the command to run the tests npm run android.app. After that, the test cases are executed in the background, but nothing happens in the emulator and in the terminal I see the message [HTTP] No route found for /session
My question is: what do need to pay attention to in order to fix this? Because I don't know what to look at and how to set up the configuration correctly. Thank you!
4 Answers
I got rid of the problem by using this command to start Appium server in the terminal:
appium --base-path /wd/hub
And use this setting in the Appium inspector
By the way, it might still not work if you use iOS simulator/device with version >= 15 with Appium 1.21 because that doesn't support iOS 15. You have to install an older iOS simulator to solve it.
We were able to resolve this issue by overriding the path variable in the wdio.conf.js:
...
path: '/wd/hub',
port: 4723,
services: ['appium'],
...
Without the path defined it apparently defaults to /session which fails with a 404 as you saw.
Do not run appium server alone.
use directly the webdriver command to run the tests.
Example for android: npm run android.app
Ah, I did fixed it. I don't know why, but it works with locally install Appium npm package.