import type { Options } from '@wdio/types'; export const config: Options.Testrunner = { runner: 'local', autoCompileOpts: { autoCompile: true, tsNodeOpts: { project: './tsconfig.json', transpileOnly: true, }, }, specs: [ './e2e/mobile/**/*.spec.ts', ], exclude: [], maxInstances: 1, capabilities: [ { platformName: 'Android', 'appium:automationName': 'UiAutomator2', 'appium:deviceName': 'Android Emulator', 'appium:app': './dist/android/app-debug.apk', 'appium:platformVersion': '13.0', 'appium:appPackage': 'io.dcloud.uniapp', 'appium:appActivity': 'io.dcloud.PandoraEntry', 'appium:noReset': true, 'appium:fullReset': false, 'appium:newCommandTimeout': 60000, 'wdio:appium:appiumVersion': '2.11.3', }, ], logLevel: 'info', bail: 0, waitforTimeout: 10000, connectionRetryTimeout: 120000, connectionRetryCount: 3, services: [ ['appium', { command: 'appium', args: { address: '127.0.0.1', port: 4723, relaxedSecurity: true, }, }], ], framework: 'mocha', reporters: [ 'spec', ['junit', { outputDir: './test-results/mobile', outputFileFormat: function(options) { return `junit-${options.cid}.${options.capabilities}.xml`; }, }], ['allure', { outputDir: './test-results/mobile/allure-results', disableWebdriverStepsReporting: true, disableWebdriverScreenshotsReporting: false, }], ], mochaOpts: { ui: 'bdd', timeout: 60000, retries: 2, }, before: async function() { await browser.pause(3000); }, beforeTest: async function(test) { console.log(`Starting test: ${test.title}`); }, afterTest: async function(test, context, { error, result, duration, passed, retries }) { if (!passed) { await browser.saveScreenshot(`./test-results/mobile/screenshots/failed-${test.title.replace(/\s+/g, '-')}.png`); } }, after: async function() { await browser.pause(2000); }, onComplete: function(exitCode, config, capabilities, results) { console.log(`Test completed with exit code: ${exitCode}`); console.log(`Total tests: ${results.tests.length}`); console.log(`Passed: ${results.passed}`); console.log(`Failed: ${results.failed}`); }, };