WebdriverIO:如何从 wdio.conf.js. 内部步骤定义文件中读取 baseURL 值



我正在使用WebdriverIO进行测试自动化。wdio.conf.js文件中,我已经配置了"baseUrl"属性。

我想读取测试.js文件中的"baseUrl"属性值。我该怎么做?

❒ 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');
},

然后,您可以直接访问它们,在测试文件或页面对象中的任何位置。这样,您可以大大减少测试文件的占用空间(错误...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'

我会在这里冒昧地假设你想从你的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


最后,我强烈建议您阅读有关导出和组件导出的信息。

WebdriverIO是建立在NodeJS之上的,所以如果你不知道如何以及何时使用exportsmodule.exportsrequire,或者它们之间的区别,你会在长期的脚下开枪。

Use browser.options.baseUrl . 如果你使用 require,你从那个文件硬编码,这很好,但你不能做一个 wdio --baseUrl=http://myTestSite2.net 来覆盖"global"baseUrl。 将来您可能希望在多个部署中执行此操作。

BaseUrl 在 config object browser.config.baseUrl 中可用 见 https://github.com/webdriverio/webdriverio/blob/a4a5a46f786f8548361d7f86834b38f89dcb1690/packages/webdriverio/webdriverio-core.d.ts#L131

wdio.config 中.js文件定义 url 如下

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

在测试文件中,使用/而不是在browser.url('/')中添加完整的 url,它将使用wdio.config.js文件中的 baseUrl。

browser.url('/')

您可以使用browser.options.baseUrl

只需将所有变量保存在 before: 函数中,即可在测试中的任何位置使用。 像下面的例子一样,我使用重试计数 WDIO 配置文件

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

相关内容

  • 没有找到相关文章

最新更新