没有看到你的设置,我无法给你一个完整的解决方案;但是,我可以提供一些可能有用的见解。
我假设您正在同时运行测试。如果是这样,那么您可能在 wdio.conf.js 中配置了不止一项功能,如下所示:
{
//maxInstances: 1,
browserName: 'chrome',
// Set 1
specs: './tests/set1/**/*.spec.js',
},
{
//maxInstances: 1,
browserName: 'chrome',
// Set 2
specs: './tests/set2/**/*.spec.js',
},
您可以采取两种方法。在方法 #1 中,我们将使用供应商前缀将我们自己的 ID 添加到每个功能。在方法 #2 中,我们将获得对实际能力 ID 的引用,这是您在日志中括号中标识的 ID。
方法一
这些功能可以通过您的任何一项测试以及 wdio.conf.js 挂钩使用browser.options.capabilities
. 所以我们可以为每个能力分配一个索引 ID,如下所示:
{
//maxInstances: 1,
browserName: 'chrome',
// Set 1
specs: './tests/set1/**/*.spec.js',
'wdio:id': 1
},
{
//maxInstances: 1,
browserName: 'chrome',
// Set 2
specs: './tests/set2/**/*.spec.js',
'wdio:id': 2
},
在每个测试中,以及 wdio.conf.js 钩子中,我们可以知道测试在 5 个浏览器中的哪一个上运行,如下所示:
describe('Example Suite', () => {
before(() => {
console.log('Test is running on browser number ' + browser.options.capabilities['wdio:id']);
// this outputs either 1, 2, 3, 4, or 5 depending on which browser the test is running on. You can use this to determine where you want to position the browser on the screen.
});
由于您不想在每个测试中都执行此操作,因此在 WebdriverIO beforeTest、beforeSuite 或 hook 之前执行此操作会更好:
beforeTest: function (test, context) {
console.log('ID = ' + browser.options.capabilities['wdio:id']);
// outputs either 1, 2, 3, 4, or 5 depending on which browser the test runs on
}
方法二
方法 2 类似于方法 #1,除了计算位置可能更困难,因为您不控制分配给每个浏览器的实际 ID。但是,我将向您展示如何访问 CID,以防万一证明它对您来说是一个更好的选择。
与方法 #1 一样,我们假设您具有以下多种功能:
{
//maxInstances: 1,
browserName: 'chrome',
// Set 1
specs: './tests/set1/**/*.spec.js',
},
{
//maxInstances: 1,
browserName: 'chrome',
// Set 2
specs: './tests/set2/**/*.spec.js',
},
WebdriverIO 有一个名为 的钩子onWorkerStart
,WebdriverIO 将 CID 作为参数之一传递给它。WebdriverIO 还将功能作为参数传递给此函数。由于我们知道我们可以从browser.options.capabilities
对象内部访问功能,因此我们可以截取 wdio.conf.js onWorkerStart 中的 CID 并将其分配为功能对象上的供应商前缀属性,如下所示:
onWorkerStart: function (cid, caps, specs, args, execArgv) {
console.log('onWorkerStart: cid = ' + cid)
caps['wdio:cid'] = cid;
},
稍后,我们可以在测试中或在另一个钩子中访问它,如下所示:
beforeTest: function (test, context) {
console.log('beforeTest: CID = ' + browser.options.capabilities['wdio:cid']);
// do something here with the CID, since the browser object is available
//...
},
有关在 WebdriverIO 中使用功能 ID 的其他用例的更多信息,请参阅我的文章识别哪个 Worker 正在运行 WebdriverIO 测试。