import path from 'node:path'import url from 'node:url'const __dirname = url.fileURLToPath(new URL('.', import.meta.url))export const config = {//// ==================// Specify Test Files// ==================// Define which test specs should run. The pattern is relative to the directory// of the configuration file being run.//// The specs are defined as an array of spec files (optionally using wildcards// that will be expanded). The test for each spec file will be run in a separate// worker process. In order to have a group of spec files run in the same worker// process simply enclose them in an array within the specs array.//// The path of the spec files will be resolved relative from the directory of// of the config file unless it's absolute.//specs: [path.resolve(__dirname, 'specs', '*.spec.js')],//// ============// Capabilities// ============// Define your capabilities here. WebdriverIO can run multiple capabilities at the same// time. Depending on the number of capabilities, WebdriverIO launches several test// sessions. Within your capabilities you can overwrite the spec and exclude option in// order to group specific specs to a specific capability.//// If you have trouble getting all important capabilities together, check out the// Sauce Labs platform configurator - a great tool to configure your capabilities:// https://saucelabs.com/platform/platform-configurator//capabilities: [{browserName: 'chrome'}],//// ===================// Test Configurations// ===================// Define all options that are relevant for the WebdriverIO instance here//// Level of logging verbosity: trace | debug | info | warn | error | silentlogLevel: 'trace',outputDir: __dirname,//// Set a base URL in order to shorten url command calls. If your `url` parameter starts// with `/`, the base url gets prepended, not including the path portion of your baseUrl.// If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url// gets prepended directly.baseUrl: 'http://the-internet.herokuapp.com',//// Default timeout for all waitForXXX commands.waitforTimeout: 150000,//// Default timeout in milliseconds for request// if browser driver or grid doesn't send responseconnectionRetryTimeout: 120000,//// Default request retries countconnectionRetryCount: 3,//// Test runner services// Services take over a specific job you don't want to take care of. They enhance// your test setup with almost no self effort. Unlike plugins they don't add new// commands but hook themselves up into the test process.// services: [],//// Framework you want to run your specs with.// The following are supported: mocha, jasmine and cucumber// see also: https://webdriver.io/docs/frameworks.html//// Make sure you have the wdio adapter package for the specific framework installed// before running any tests.framework: 'mocha',//// Test reporter for stdout.// The only one supported by default is 'dot'// see also: https://webdriver.io/docs/dot-reporter.htmlreporters: ['spec'],//// Options to be passed to Mocha.// See the full list at http://mochajs.org/mochaOpts: {ui: 'bdd',timeout: 30000},//// =====// Hooks// =====// WebdriverIO provides a several hooks you can use to interfere the test process in order to enhance// it and build services around it. You can either apply a single function to it or an array of// methods. If one of them returns with a promise, WebdriverIO will wait until that promise got// resolved to continue.//// Gets executed once before all workers get launched.// onPrepare: function (config, capabilities) {// },//// Gets executed before a worker process is spawned and can be used to initialize specific service// for that worker as well as modify runtime environments in an async fashion.// onWorkerStart: function (cid, caps, specs, args, execArgv) {// },//// Gets executed just after a worker process has exited.// onWorkerEnd: function (cid, exitCode, specs, retries) {// },//// Gets executed before test execution begins. At this point you can access to all global// variables like `browser`. It is the perfect place to define custom commands.// before: function (capabilities, specs, browser) {// },//// Hook that gets executed before the suite starts// beforeSuite: function (suite) {// },//// Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling// beforeEach in Mocha). In Cucumber `context` is the World object.// beforeHook: function (test, context, hookName) {// },//// Hook that gets executed _after_ a hook within the suite ends (e.g. runs after calling// afterEach in Mocha). In Cucumber `context` is the World object.// afterHook: function (test, context, { error, result, duration, passed, retries }, hookName) {// },//// Function to be executed before a test (in Mocha/Jasmine) starts.// beforeTest: function (test, context) {// },//// Runs before a WebdriverIO command gets executed.// beforeCommand: function (commandName, args) {// },//// Runs after a WebdriverIO command gets executed// afterCommand: function (commandName, args, result, error) {// },//// Function to be executed after a test (in Mocha/Jasmine) ends.// afterTest: function (test, context, { error, result, duration, passed, retries }) {// },//// Hook that gets executed after the suite has ended// afterSuite: function (suite) {// },//// Cucumber Hooks//// Runs before a Cucumber Feature.// @param {String} uri path to feature file// @param {GherkinDocument.IFeature} feature Cucumber feature object//// beforeFeature: function (uri, feature) {// },////// Runs before a Cucumber Scenario.// @param {ITestCaseHookParameter} world world object containing information on pickle and test step// @param {object} context Cucumber World object//// beforeScenario: function (world, context) {// },////// Runs before a Cucumber Step.// @param {Pickle.IPickleStep} step step data// @param {IPickle} scenario scenario pickle// @param {object} context Cucumber World object//// beforeStep: function (step, scenario, context) {// },////// Runs after a Cucumber Step.// @param {Pickle.IPickleStep} step step data// @param {IPickle} scenario scenario pickle// @param {object} result results object containing scenario results// @param {boolean} result.passed true if scenario has passed// @param {string} result.error error stack if scenario failed// @param {number} result.duration duration of scenario in milliseconds// @param {object} context Cucumber World object//// afterStep: function (step, scenario, result, context) {// },////// Runs after a Cucumber Scenario.// @param {ITestCaseHookParameter} world world object containing information on pickle and test step// @param {object} result results object containing scenario results// @param {boolean} result.passed true if scenario has passed// @param {string} result.error error stack if scenario failed// @param {number} result.duration duration of scenario in milliseconds// @param {object} context Cucumber World object//// afterScenario: function (world, result) {// },////// Runs after a Cucumber Feature.// @param {String} uri path to feature file// @param {GherkinDocument.IFeature} feature Cucumber feature object//// afterFeature: function (uri, feature) {// }}