WebdriverIO: как прочитать значение baseURL из wdio.conf.js. файл определения внутреннего шага

Я использую WebdriverIO для автоматизации тестирования. В файле wdio.conf.js я настроил свойство baseUrl.

Я хочу прочитать значение свойства baseUrl в моем тестовом .js файле. Как я могу это сделать?


person Thangakumar D    schedule 15.06.2017    source источник
comment
Вы хотите использовать файл из wdio.config.js файла или из test.js? Вы написали это так небрежно, что я не могу сказать, что вам нужно. Пожалуйста, отредактируйте свой вопрос и будьте более конкретными.   -  person iamdanchiv    schedule 15.06.2017


Ответы (5)


❒ wdio-v5

В последнее время, после написания множества тестов для переписывания проекта, я пришел к выводу, что лучший способ хранить / получать доступ к глобальным переменным конфигурации - через объект global.

Вы можете определить их внутри файловых ловушек wdio.conf.js. Я определил свой в хуке before:

before: function (capabilities, specs) {
  // =================
  // Assertion Library
  // =================
  const chai    = require('chai');
  global.expect = chai.expect;
  global.assert = chai.assert;
  global.should = chai.should();
  // ======================
  // Miscellaneous Packages
  // ======================
  global.langCode = langCode;
  global.countryCode = countryCode;
  global.request = require('superagent');
  global.allowedStatusCodes = [200, 301],
  // ===============
  // Custom Commands
  // ===============
  require('./test/custom_commands/aFancyMethod');
  require('./test/custom_commands/anotherOne');
  require('./test/custom_commands/andAnotherOne');
},

Затем вы можете получить к ним доступ напрямую, где угодно в ваших тестовых файлах или объектах страницы. Таким образом, вы значительно уменьшите размер тестового файла (errr ... codeprint), потому что вы можете вызывать их непосредственно в своем тестовом примере:

describe(`Testing a random URL`, () => {
  it('Should return a HTTP valid status code', async () => {
    // Issue a HTTP request for the given URL:
    await request
      .head('https://random.org')
      .then(res => {
        console.info(`\n> Status code found: ${res.status} | MIME type found: '${res.type}'\n`);
        foundStatusCode = res.status;
      })
      .catch(err => {
        console.info(`\n> Status code found: ${err.status} | Error response found: '${JSON.stringify(err.response)}'\n`);
        foundStatusCode = err.status;
      });
    // Assert the HTTP Status Code:
    assert.include(allowedStatusCodes, foundStatusCode, `!AssertError: Route yields a bad status code! Got: ${foundStatusCode} | Expected: ${allowedStatusCodes}`);
  }); 

В отличие от того, чтобы всегда делать await browser.options.request.head(..., browser.options.baseUrl и т. Д.


❒ wdio-v4

Все атрибуты файла wdio.conf.js (в основном пары имя-значение объекта config) также хранятся внутри объекта browser.options.

Таким образом, более элегантный подход к доступу к вашим глобальным значениям конфигурации изнутри ваших тестов будет представлен ниже:

> browser.options
{ port: 4444,
  protocol: 'http',
  waitforTimeout: 10000,
  waitforInterval: 500,
  coloredLogs: true,
  deprecationWarnings: false,
  logLevel: 'verbose',
  baseUrl: 'http://localhost',
  // ... etc ...
}

> browser.options.baseUrl
'http://localhost'

Здесь я рискну и предположу, что вы хотите прочитать значение baseUrl из своего wdio.config.js файла в свой test.js файл.

TL; DR: в заголовок test.js файла добавьте следующее:

var config = require('<pathToWdioConfJS>/wdio.conf.js').config;

Затем вы можете получить доступ к любому значению wdio.config.js через config.<configOption>, в вашем случае config.baseUrl.


Наконец, я настоятельно рекомендую вам прочитать о экспорт и экспорт модулей.

WebdriverIO построен на NodeJS, поэтому вы в конечном итоге выстрелите себе в ногу, если не знаете, как и когда использовать exports, module.exports, require или разницу между ними.

person iamdanchiv    schedule 15.06.2017
comment
Спасибо iamdanchiv :) - person Thangakumar D; 15.06.2017
comment
Спасибо, это лучшее объяснение того, как получить доступ к переменным из файлов конфигурации, что я видел! - person Tim Swift; 25.05.2021

Используйте browser.options.baseUrl. Если вы используете require, вы жестко кодируете этот файл, и это нормально, но вы не можете выполнить wdio --baseUrl = http://myTestSite2.net, чтобы переопределить "глобальный" baseUrl. Что вы, возможно, захотите сделать в нескольких развертываниях в будущем.

person Nate R    schedule 17.07.2018

В файле wdio.config.js укажите такой URL-адрес

var baseUrl = 'YOUR URL'
exports.config = {
        baseUrl: baseUrl,
}

В тестовом файле используйте / вместо добавления полного URL в browser.url('/'), он будет использовать baseUrl из файла wdio.config.js.

browser.url('/')
person Mridul    schedule 14.11.2019

BaseUrl доступен в объекте конфигурации browser.config.baseUrl См. https://github.com/webdriverio/webdriverio/blob/a4a5a46f786f8548361d7f86834b38f89dcb1690/packages/webdriverio/webdriverio/webdriverio.driverio/

person Mike G.    schedule 21.09.2020

просто сохраните все свои переменные в before: function, и их можно будет использовать в любом месте вашего теста. как в следующем примере, я использую файл конфигурации wdio счетчика повторов

before: function (capabilities, specs) {
         expect = require('chai').expect;
         should = require('chai').should();
         assert = require('assert');
         retryCount=2;
         browser.maximizeWindow();
person Aman Sharma    schedule 06.09.2019