WebdriverIO:如何从 wdio.conf.js 读取 baseURL 值。内部步骤定义文件
WebdriverIO: How to read baseURL value from wdio.conf.js. inside step definition file
我正在使用 WebdriverIO 进行测试自动化。在 wdio.conf.js
文件中,我配置了 'baseUrl' 属性。
我想读取我的测试 .js
文件中的 'baseUrl' 属性 值。我该怎么做?
❒ wdio-v5
最近,在为项目重写编写了大量测试后,我开始相信 store/access 全局配置变量的最佳方法是通过 global
object。
您可以在 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');
},
然后,您可以在 test-files 或 page-objects 中的任何地方 直接访问它们。这样,您可以大大减少 test-file 的占用空间(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
object name-value 对)也存储在 browser.options
object 中。
因此,一种从测试内部访问全局配置值的更优雅的方法如下所示:
> 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'
我会冒昧地假设您想从 wdio.config.js
文件中读取 baseUrl
值到 test.js
文件中。
TL;DR: 在您的 test.js
文件标题中,添加以下内容:
var config = require('<pathToWdioConfJS>/wdio.conf.js').config;
然后您可以通过 config.<configOption>
访问任何 wdio.config.js
值,在您的情况下 config.baseUrl
。
最后,我会强烈推荐你读过exports and module exports。
WebdriverIO 是基于 NodeJS 构建的,所以如果您不知道如何以及何时使用 exports
、module.exports
,您将搬起石头砸自己的脚 运行 require
,或者两者的区别
使用browser.options.baseUrl。如果您使用 require,则您是从那个文件进行硬编码,这很好,但是您不能执行 wdio --baseUrl=http://myTestSite2.net 来覆盖 "global" baseUrl。您将来可能希望在多个部署中执行此操作。
只需将所有变量保存在 before: 函数中,即可在测试中的任何位置使用。
像下面的例子我使用重试计数 wdio 配置文件
before: function (capabilities, specs) {
expect = require('chai').expect;
should = require('chai').should();
assert = require('assert');
retryCount=2;
browser.maximizeWindow();
在wdio.config.js文件中这样定义url
var baseUrl = 'YOUR URL'
exports.config = {
baseUrl: baseUrl,
}
在测试文件中使用 /
而不是在 browser.url('/')
中添加完整的 url,它将使用 wdio.config.js[=20 中的 baseUrl =] 文件.
browser.url('/')
BaseUrl 在配置对象中可用 browser.config.baseUrl
参见 https://github.com/webdriverio/webdriverio/blob/a4a5a46f786f8548361d7f86834b38f89dcb1690/packages/webdriverio/webdriverio-core.d.ts#L131
我正在使用 WebdriverIO 进行测试自动化。在 wdio.conf.js
文件中,我配置了 'baseUrl' 属性。
我想读取我的测试 .js
文件中的 'baseUrl' 属性 值。我该怎么做?
❒ wdio-v5
最近,在为项目重写编写了大量测试后,我开始相信 store/access 全局配置变量的最佳方法是通过 global
object。
您可以在 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');
},
然后,您可以在 test-files 或 page-objects 中的任何地方 直接访问它们。这样,您可以大大减少 test-file 的占用空间(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
object name-value 对)也存储在 browser.options
object 中。
因此,一种从测试内部访问全局配置值的更优雅的方法如下所示:
> 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'
我会冒昧地假设您想从 wdio.config.js
文件中读取 baseUrl
值到 test.js
文件中。
TL;DR: 在您的 test.js
文件标题中,添加以下内容:
var config = require('<pathToWdioConfJS>/wdio.conf.js').config;
然后您可以通过 config.<configOption>
访问任何 wdio.config.js
值,在您的情况下 config.baseUrl
。
最后,我会强烈推荐你读过exports and module exports。
WebdriverIO 是基于 NodeJS 构建的,所以如果您不知道如何以及何时使用 exports
、module.exports
,您将搬起石头砸自己的脚 运行 require
,或者两者的区别
使用browser.options.baseUrl。如果您使用 require,则您是从那个文件进行硬编码,这很好,但是您不能执行 wdio --baseUrl=http://myTestSite2.net 来覆盖 "global" baseUrl。您将来可能希望在多个部署中执行此操作。
只需将所有变量保存在 before: 函数中,即可在测试中的任何位置使用。 像下面的例子我使用重试计数 wdio 配置文件
before: function (capabilities, specs) {
expect = require('chai').expect;
should = require('chai').should();
assert = require('assert');
retryCount=2;
browser.maximizeWindow();
在wdio.config.js文件中这样定义url
var baseUrl = 'YOUR URL'
exports.config = {
baseUrl: baseUrl,
}
在测试文件中使用 /
而不是在 browser.url('/')
中添加完整的 url,它将使用 wdio.config.js[=20 中的 baseUrl =] 文件.
browser.url('/')
BaseUrl 在配置对象中可用 browser.config.baseUrl 参见 https://github.com/webdriverio/webdriverio/blob/a4a5a46f786f8548361d7f86834b38f89dcb1690/packages/webdriverio/webdriverio-core.d.ts#L131