Przejdź do głównej treści

Plik konfiguracyjny

Plik konfiguracyjny zawiera wszystkie niezbędne informacje do uruchomienia zestawu testów. Jest to moduł NodeJS, który eksportuje obiekt JSON.

Oto przykładowa konfiguracja ze wszystkimi obsługiwanymi właściwościami i dodatkowymi informacjami:

export const config = {

// ==================================
// Gdzie powinny być uruchamiane Twoje testy
// ==================================
//
runner: 'local',
//
// =====================
// Konfiguracje serwera
// =====================
// Adres hosta działającego serwera Selenium. Ta informacja jest zazwyczaj zbędna, ponieważ
// WebdriverIO automatycznie łączy się z localhost. Również jeśli używasz jednej z
// obsługiwanych usług chmurowych, takich jak Sauce Labs, Browserstack, Testing Bot lub LambdaTest, również nie
// musisz definiować informacji o hoście i porcie (ponieważ WebdriverIO może to ustalić
// na podstawie informacji o użytkowniku i kluczu). Jednak jeśli korzystasz z prywatnego backendu
// Selenium, powinieneś zdefiniować tutaj `hostname`, `port` i `path`.
//
hostname: 'localhost',
port: 4444,
path: '/',
// Protocol: http | https
// protocol: 'http',
//
// =================
// Dostawcy usług
// =================
// WebdriverIO obsługuje Sauce Labs, Browserstack, Testing Bot i LambdaTest. (Inni dostawcy chmurowi
// również powinni działać.) Te usługi definiują konkretne wartości `user` i `key` (lub klucz dostępu),
// które musisz tutaj umieścić, aby połączyć się z tymi usługami.
//
user: 'webdriverio',
key: 'xxxxxxxxxxxxxxxx-xxxxxx-xxxxx-xxxxxxxxx',

// Jeśli uruchamiasz swoje testy w Sauce Labs, możesz określić region, w którym chcesz uruchamiać swoje testy
// za pomocą właściwości `region`. Dostępne skrócone oznaczenia regionów to `us` (domyślnie) i `eu`.
// Te regiony są używane dla Sauce Labs VM cloud i Sauce Labs Real Device Cloud.
// Jeśli nie podasz regionu, domyślnie będzie to `us`.
region: 'us',
//
// Sauce Labs oferuje [testowanie bezgłowicowe](https://saucelabs.com/products/web-testing/sauce-headless-testing),
// które umożliwia uruchamianie testów Chrome i Firefox w trybie headless.
//
headless: false,
//
// ==================
// Określenie plików testowych
// ==================
// Zdefiniuj, które pliki specyfikacji testów powinny zostać uruchomione. Wzorzec jest względny do katalogu
// pliku konfiguracyjnego, który jest uruchamiany.
//
// Specyfikacje są definiowane jako tablica plików specyfikacji (opcjonalnie z użyciem znaków wieloznacznych,
// które zostaną rozwinięte). Test dla każdego pliku specyfikacji będzie uruchamiany w oddzielnym
// procesie roboczym. Aby mieć grupę plików specyfikacji uruchamianych w tym samym procesie
// roboczym, umieść je w tablicy wewnątrz tablicy specs.
//
// Ścieżka plików specyfikacji zostanie rozwiązana względem katalogu
// pliku konfiguracyjnego, chyba że jest bezwzględna.
//
specs: [
'test/spec/**',
['group/spec/**']
],
// Wzorce do wykluczenia.
exclude: [
'test/spec/multibrowser/**',
'test/spec/mobile/**'
],
//
// ============
// Możliwości
// ============
// Zdefiniuj swoje możliwości tutaj. WebdriverIO może uruchamiać wiele możliwości jednocześnie.
// W zależności od liczby możliwości, WebdriverIO uruchamia kilka sesji testowych.
// W ramach swoich `capabilities` możesz nadpisać opcje `spec` i `exclude`,
// aby zgrupować konkretne specyfikacje dla konkretnych możliwości.
//
// Najpierw możesz zdefiniować, ile instancji powinno być uruchomionych w tym samym czasie. Powiedzmy,
// że masz 3 różne możliwości (Chrome, Firefox i Safari) i masz
// ustawione `maxInstances` na 1. wdio uruchomi 3 procesy.
//
// Dlatego, jeśli masz 10 plików specyfikacji i ustawisz `maxInstances` na 10, wszystkie pliki specyfikacji
// będą testowane jednocześnie i zostanie uruchomionych 30 procesów.
//
// Ta właściwość określa, ile możliwości z tego samego testu powinno uruchamiać testy.
//
maxInstances: 10,
//
// Lub ustaw limit, aby uruchamiać testy z konkretną możliwością.
maxInstancesPerCapability: 10,
//
// Wstawia globalne zmienne WebdriverIO (np. `browser`, `$` i `$$`) do globalnego środowiska.
// Jeśli ustawisz na `false`, powinieneś importować z `@wdio/globals`. Uwaga: WebdriverIO nie
// obsługuje wstrzykiwania globalnych zmiennych specyficznych dla frameworka testowego.
//
injectGlobals: true,
//
// Jeśli masz problemy z zebraniem wszystkich ważnych możliwości, sprawdź
// konfigurator platformy Sauce Labs - świetne narzędzie do konfigurowania możliwości:
// https://docs.saucelabs.com/basics/platform-configurator
//
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': {
// aby uruchomić chrome w trybie headless wymagane są następujące flagi
// (zobacz https://developers.google.com/web/updates/2017/04/headless-chrome)
// args: ['--headless', '--disable-gpu'],
}
//
// Parametr do ignorowania niektórych lub wszystkich domyślnych flag
// - jeśli wartość to true: ignoruje wszystkie 'domyślne flagi' DevTools i 'domyślne argumenty' Puppeteer
// - jeśli wartość to tablica: DevTools filtruje podane domyślne argumenty
// 'wdio:devtoolsOptions': {
// ignoreDefaultArgs: true,
// ignoreDefaultArgs: ['--disable-sync', '--disable-extensions'],
// }
}, {
// maxInstances może zostać nadpisane dla każdej możliwości. Więc jeśli masz własną sieć Selenium
// z tylko 5 instancjami Firefoxa, możesz upewnić się, że nie więcej niż
// 5 instancji zostanie uruchomionych jednocześnie.
'wdio:maxInstances': 5,
browserName: 'firefox',
'wdio:specs': [
'test/ffOnly/*'
],
'moz:firefoxOptions': {
// flaga do aktywowania trybu headless Firefoxa (zobacz https://github.com/mozilla/geckodriver/blob/master/README.md#firefox-capabilities, aby uzyskać więcej informacji o moz:firefoxOptions)
// args: ['-headless']
},
// Jeśli podano outputDir, WebdriverIO może przechwytywać logi sesji sterownika
// możliwe jest skonfigurowanie, które typy logów wykluczyć.
excludeDriverLogs: ['*'], // przekaż '*', aby wykluczyć wszystkie logi sesji sterownika
excludeDriverLogs: ['bugreport', 'server'],
//
// Parametr do ignorowania niektórych lub wszystkich domyślnych argumentów Puppeteer
// ignoreDefaultArgs: ['-foreground'], // ustaw wartość na true, aby ignorować wszystkie domyślne argumenty
}],
//
// Dodatkowa lista argumentów node do użycia przy uruchamianiu procesów potomnych
execArgv: [],
//
// ===================
// Konfiguracje testów
// ===================
// Zdefiniuj wszystkie opcje, które są istotne dla instancji WebdriverIO tutaj
//
// Poziom szczegółowości logowania: trace | debug | info | warn | error | silent
logLevel: 'info',
//
// Ustaw określone poziomy logowania dla poszczególnych loggerów
// użyj poziomu 'silent', aby wyłączyć logger
logLevels: {
webdriver: 'info',
'@wdio/appium-service': 'info'
},
//
// Ustaw katalog do przechowywania wszystkich logów
outputDir: __dirname,
//
// Jeśli chcesz uruchamiać testy tylko do momentu, gdy określona liczba testów zakończy się niepowodzeniem, użyj
// bail (domyślnie 0 - nie przerywaj, uruchom wszystkie testy).
bail: 0,
//
// Ustaw bazowy URL, aby skrócić wywołania komendy `url()`. Jeśli Twój parametr `url` zaczyna się
// od `/`, `baseUrl` jest dołączany, z wyłączeniem części ścieżki `baseUrl`.
//
// Jeśli Twój parametr `url` zaczyna się bez schematu lub `/` (jak `some/path`), `baseUrl`
// jest dołączany bezpośrednio.
baseUrl: 'http://localhost:8080',
//
// Domyślny limit czasu dla wszystkich poleceń waitForXXX.
waitforTimeout: 1000,
//
// Dodaj pliki do obserwacji (np. kod aplikacji lub obiekty stron) podczas uruchamiania polecenia `wdio`
// z flagą `--watch`. Obsługiwane jest globbing.
filesToWatch: [
// np. uruchom testy ponownie, jeśli zmienię kod mojej aplikacji
// './app/**/*.js'
],
//
// Framework, z którym chcesz uruchamiać swoje specyfikacje.
// Obsługiwane są następujące: 'mocha', 'jasmine' i 'cucumber'
// Zobacz także: https://webdriver.io/docs/frameworks.html
//
// Upewnij się, że masz zainstalowany pakiet adaptera wdio dla konkretnego frameworka przed uruchomieniem jakichkolwiek testów.
framework: 'mocha',
//
// Liczba prób ponownego uruchomienia całego pliku specyfikacji, gdy cały plik kończy się niepowodzeniem
specFileRetries: 1,
// Opóźnienie w sekundach między próbami ponownego uruchomienia pliku specyfikacji
specFileRetriesDelay: 0,
// Czy powtórzone pliki specyfikacji powinny być ponownie uruchamiane natychmiast czy odłożone na koniec kolejki
specFileRetriesDeferred: false,
//
// Reporter testów dla stdout.
// Jedynym obsługiwanym domyślnie jest 'dot'
// Zobacz także: https://webdriver.io/docs/dot-reporter.html i kliknij "Reporters" w lewej kolumnie
reporters: [
'dot',
['allure', {
//
// Jeśli używasz reportera "allure", powinieneś zdefiniować katalog, w którym
// WebdriverIO powinno zapisywać wszystkie raporty allure.
outputDir: './'
}]
],
//
// Opcje, które mają być przekazane do Mocha.
// Zobacz pełną listę na: http://mochajs.org
mochaOpts: {
ui: 'bdd'
},
//
// Opcje, które mają być przekazane do Jasmine.
// Zobacz także: https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-jasmine-framework#jasmineopts-options
jasmineOpts: {
//
// Domyślny limit czasu Jasmine
defaultTimeoutInterval: 5000,
//
// Framework Jasmine pozwala przechwytywać każdą asercję, aby rejestrować stan aplikacji
// lub strony internetowej w zależności od wyniku. Na przykład, jest dość przydatne robienie zrzutu ekranu za każdym razem,
// gdy asercja kończy się niepowodzeniem.
expectationResultHandler: function(passed, assertion) {
// zrób coś
},
//
// Korzystaj z funkcji grep specyficznej dla Jasmine
grep: null,
invertGrep: null
},
//
// Jeśli używasz Cucumber, musisz określić, gdzie znajdują się definicje kroków.
// Zobacz także: https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-cucumber-framework#cucumberopts-options
cucumberOpts: {
require: [], // <string[]> (plik/katalog) wymaga plików przed wykonaniem funkcji
backtrace: false, // <boolean> pokaż pełny ślad dla błędów
compiler: [], // <string[]> ("rozszerzenie:moduł") wymaga plików z podanym ROZSZERZENIEM po wymaganiu MODUŁU (powtarzalne)
dryRun: false, // <boolean> wywołuj formaty bez wykonywania kroków
failFast: false, // <boolean> przerwij uruchomienie przy pierwszym niepowodzeniu
snippets: true, // <boolean> ukryj fragmenty definicji kroków dla oczekujących kroków
source: true, // <boolean> ukryj źródłowe URI
strict: false, // <boolean> zakończ niepowodzeniem, jeśli istnieją niezdefiniowane lub oczekujące kroki
tagExpression: '', // <string> (wyrażenie) wykonaj tylko funkcje lub scenariusze z tagami pasującymi do wyrażenia
timeout: 20000, // <number> limit czasu dla definicji kroków
ignoreUndefinedDefinitions: false, // <boolean> Włącz tę konfigurację, aby traktować niezdefiniowane definicje jako ostrzeżenia.
scenarioLevelReporter: false // Włącz to, aby sprawić, by webdriver.io zachowywał się tak, jakby scenariusze, a nie kroki, były testami.
},
// Określ niestandardową ścieżkę tsconfig - WDIO używa `tsx` do kompilacji plików TypeScript
// Twój TSConfig jest automatycznie wykrywany z bieżącego katalogu roboczego
// ale możesz określić niestandardową ścieżkę tutaj lub ustawiając zmienną środowiskową TSX_TSCONFIG_PATH
// Zobacz dokumentację `tsx`: https://tsx.is/dev-api/node-cli#custom-tsconfig-json-path
//
// Uwaga: To ustawienie zostanie nadpisane przez zmienną środowiskową TSX_TSCONFIG_PATH i/lub argument --tsConfigPath cli, jeśli są określone.
// To ustawienie zostanie zignorowane, jeśli node nie jest w stanie przeanalizować pliku wdio.conf.ts bez pomocy tsx, np. jeśli masz
// aliasy ścieżek skonfigurowane w tsconfig.json i używasz tych aliasów ścieżek w pliku wdio.config.ts.
// Używaj tego tylko wtedy, gdy używasz pliku konfiguracyjnego .js lub plik konfiguracyjny .ts jest prawidłowym kodem JavaScript.
tsConfigPath: 'path/to/tsconfig.json',
//
// =====
// Hooki
// =====
// WebdriverIO udostępnia kilka hooków, których możesz użyć do ingerowania w proces testowy w celu jego ulepszenia
// i budowania usług wokół niego. Możesz zastosować pojedynczą funkcję lub tablicę
// metod. Jeśli jedna z nich zwraca obietnicę, WebdriverIO poczeka, aż ta obietnica zostanie
// rozwiązana, aby kontynuować.
//
/**
* Wykonywane raz przed uruchomieniem wszystkich pracowników.
* @param {object} config obiekt konfiguracyjny wdio
* @param {Array.<Object>} capabilities lista szczegółów możliwości
*/
onPrepare: function (config, capabilities) {
},
/**
* Wykonywane przed uruchomieniem procesu roboczego i może być używane do inicjalizacji określonej usługi
* dla tego pracownika, a także do modyfikacji środowisk wykonawczych w sposób asynchroniczny.
* @param {string} cid identyfikator możliwości (np. 0-0)
* @param {object} caps obiekt zawierający możliwości dla sesji, która zostanie utworzona w procesie roboczym
* @param {object} specs specyfikacje do uruchomienia w procesie roboczym
* @param {object} args obiekt, który zostanie połączony z główną konfiguracją po zainicjowaniu pracownika
* @param {object} execArgv lista argumentów ciągów przekazywanych do procesu roboczego
*/
onWorkerStart: function (cid, caps, specs, args, execArgv) {
},
/**
* Wykonywane po zakończeniu procesu roboczego.
* @param {string} cid identyfikator możliwości (np. 0-0)
* @param {number} exitCode 0 - sukces, 1 - niepowodzenie
* @param {object} specs specyfikacje do uruchomienia w procesie roboczym
* @param {number} retries liczba użytych ponownych prób
*/
onWorkerEnd: function (cid, exitCode, specs, retries) {
},
/**
* Wykonywane przed inicjalizacją sesji webdriver i frameworka testowego. Pozwala to na
* manipulowanie konfiguracjami w zależności od możliwości lub specyfikacji.
* @param {object} config obiekt konfiguracyjny wdio
* @param {Array.<Object>} capabilities lista szczegółów możliwości
* @param {Array.<String>} specs Lista ścieżek plików specyfikacji, które mają być uruchomione
*/
beforeSession: function (config, capabilities, specs) {
},
/**
* Wykonywane przed rozpoczęciem wykonania testu. W tym momencie masz dostęp do wszystkich zmiennych globalnych
* takich jak `browser`. Jest to idealne miejsce do definiowania niestandardowych poleceń.
* @param {Array.<Object>} capabilities lista szczegółów możliwości
* @param {Array.<String>} specs Lista ścieżek plików specyfikacji, które mają być uruchomione
* @param {object} browser instancja utworzonej sesji przeglądarki/urządzenia
*/
before: function (capabilities, specs, browser) {
},
/**
* Wykonywane przed rozpoczęciem pakietu (tylko w Mocha/Jasmine).
* @param {object} suite szczegóły pakietu
*/
beforeSuite: function (suite) {
},
/**
* Ten hook jest wykonywany _przed_ każdym hookiem w pakiecie.
* (Na przykład, działa to przed wywołaniem `before`, `beforeEach`, `after`, `afterEach` w Mocha.) W Cucumber `context` to obiekt World.
*
*/
beforeHook: function (test, context, hookName) {
},
/**
* Hook, który jest wykonywany _po_ każdym hooku w pakiecie.
* (Na przykład, działa to po wywołaniu `before`, `beforeEach`, `after`, `afterEach` w Mocha.) W Cucumber `context` to obiekt World.
*/
afterHook: function (test, context, { error, result, duration, passed, retries }, hookName) {
},
/**
* Funkcja do wykonania przed testem (tylko w Mocha/Jasmine)
* @param {object} test obiekt testowy
* @param {object} context obiekt zakresu, w którym test został wykonany
*/
beforeTest: function (test, context) {
},
/**
* Uruchamiane przed wykonaniem polecenia WebdriverIO.
* @param {string} commandName nazwa polecenia hook
* @param {Array} args argumenty, które polecenie by otrzymało
*/
beforeCommand: function (commandName, args) {
},
/**
* Uruchamiane po wykonaniu polecenia WebdriverIO
* @param {string} commandName nazwa polecenia hook
* @param {Array} args argumenty, które polecenie by otrzymało
* @param {*} result wynik polecenia
* @param {Error} error obiekt błędu, jeśli występuje
*/
afterCommand: function (commandName, args, result, error) {
},
/**
* Funkcja do wykonania po teście (tylko w Mocha/Jasmine)
* @param {object} test obiekt testowy
* @param {object} context obiekt zakresu, w którym test został wykonany
* @param {Error} result.error obiekt błędu w przypadku niepowodzenia testu, w przeciwnym razie `undefined`
* @param {*} result.result obiekt zwracany funkcji testowej
* @param {number} result.duration czas trwania testu
* @param {boolean} result.passed true, jeśli test przeszedł, w przeciwnym razie false
* @param {object} result.retries informacje o ponownych próbach związanych ze specyfikacją, np. `{ attempts: 0, limit: 0 }`
*/
afterTest: function (test, context, { error, result, duration, passed, retries }) {
},
/**
* Hook, który jest wykonywany po zakończeniu pakietu (tylko w Mocha/Jasmine).
* @param {object} suite szczegóły pakietu
*/
afterSuite: function (suite) {
},
/**
* Wykonywane po zakończeniu wszystkich testów. Nadal masz dostęp do wszystkich zmiennych globalnych
* z testu.
* @param {number} result 0 - test przeszedł, 1 - test nie powiódł się
* @param {Array.<Object>} capabilities lista szczegółów możliwości
* @param {Array.<String>} specs Lista ścieżek plików specyfikacji, które zostały uruchomione
*/
after: function (result, capabilities, specs) {
},
/**
* Wykonywane zaraz po zakończeniu sesji webdriver.
* @param {object} config obiekt konfiguracyjny wdio
* @param {Array.<Object>} capabilities lista szczegółów możliwości
* @param {Array.<String>} specs Lista ścieżek plików specyfikacji, które zostały uruchomione
*/
afterSession: function (config, capabilities, specs) {
},
/**
* Wykonywane po zatrzymaniu wszystkich pracowników i tuż przed zakończeniem procesu.
* Błąd zgłoszony w hooku `onComplete` spowoduje niepowodzenie uruchomienia testu.
* @param {object} exitCode 0 - sukces, 1 - niepowodzenie
* @param {object} config obiekt konfiguracyjny wdio
* @param {Array.<Object>} capabilities lista szczegółów możliwości
* @param {<Object>} results obiekt zawierający wyniki testów
*/
onComplete: function (exitCode, config, capabilities, results) {
},
/**
* Wykonywane, gdy następuje odświeżenie.
* @param {string} oldSessionId identyfikator sesji starej sesji
* @param {string} newSessionId identyfikator sesji nowej sesji
*/
onReload: function(oldSessionId, newSessionId) {
},
/**
* Hooki Cucumber
*
* Uruchamiane przed funkcją Cucumber.
* @param {string} uri ścieżka do pliku funkcji
* @param {GherkinDocument.IFeature} feature obiekt funkcji Cucumber
*/
beforeFeature: function (uri, feature) {
},
/**
*
* Uruchamiane przed scenariuszem Cucumber.
* @param {ITestCaseHookParameter} world obiekt świata zawierający informacje o pickle i kroku testowym
* @param {object} context obiekt Cucumber World
*/
beforeScenario: function (world, context) {
},
/**
*
* Uruchamiane przed krokiem Cucumber.
* @param {Pickle.IPickleStep} step dane kroku
* @param {IPickle} scenario pickle scenariusza
* @param {object} context obiekt Cucumber World
*/
beforeStep: function (step, scenario, context) {
},
/**
*
* Uruchamiane po kroku Cucumber.
* @param {Pickle.IPickleStep} step dane kroku
* @param {IPickle} scenario pickle scenariusza
* @param {object} result obiekt wyników zawierający wyniki scenariusza
* @param {boolean} result.passed true jeśli scenariusz przeszedł
* @param {string} result.error stos błędu, jeśli scenariusz nie powiódł się
* @param {number} result.duration czas trwania scenariusza w milisekundach
* @param {object} context obiekt Cucumber World
*/
afterStep: function (step, scenario, result, context) {
},
/**
*
* Uruchamiane po scenariuszu Cucumber.
* @param {ITestCaseHookParameter} world obiekt świata zawierający informacje o pickle i kroku testowym
* @param {object} result obiekt wyników zawierający wyniki scenariusza `{passed: boolean, error: string, duration: number}`
* @param {boolean} result.passed true jeśli scenariusz przeszedł
* @param {string} result.error stos błędu, jeśli scenariusz nie powiódł się
* @param {number} result.duration czas trwania scenariusza w milisekundach
* @param {object} context obiekt Cucumber World
*/
afterScenario: function (world, result, context) {
},
/**
*
* Uruchamiane po funkcji Cucumber.
* @param {string} uri ścieżka do pliku funkcji
* @param {GherkinDocument.IFeature} feature obiekt funkcji Cucumber
*/
afterFeature: function (uri, feature) {
},
/**
* Uruchamiane przed dokonaniem asercji przez bibliotekę asercji WebdriverIO.
* @param commandName nazwa polecenia
* @param args argumenty, które polecenie by otrzymało
*/
beforeAssertion: function (params) {
},
/**
* Uruchamiane po wykonaniu polecenia WebdriverIO
* @param commandName nazwa polecenia
* @param args argumenty, które polecenie by otrzymało
* @param result wynik polecenia
* @param error błąd w przypadku, gdy coś poszło nie tak
*/
afterAssertion: function (params) {
}
}

Możesz również znaleźć plik ze wszystkimi możliwymi opcjami i wariantami w folderze przykładów.

Welcome! How can I help?

WebdriverIO AI Copilot