Javascript 根据执行的测试套件运行代码,例如登录

Javascript 根据执行的测试套件运行代码,例如登录,javascript,selenium-webdriver,Javascript,Selenium Webdriver,TL;DR:我希望在测试套件之前运行代码,这取决于要运行的测试套件,例如,以特定用户的身份登录 我的wdio.conf.js的一部分如下所示: exports.config = { specs: [ './spec/**/*.spec.js' ], suites: { allExceptAandB: [ './spec/**/!(A|B).spec.js' ], A: [

TL;DR:我希望在测试套件之前运行代码,这取决于要运行的测试套件,例如,以特定用户的身份登录


我的
wdio.conf.js
的一部分如下所示:

exports.config = {
    specs: [
        './spec/**/*.spec.js'
    ],
    suites: {
        allExceptAandB: [
            './spec/**/!(A|B).spec.js'
        ],
        A: [
            './spec/A.spec.js'
        ],
        B: [
            './spec/B.spec.js'
        ]
    },
    [...]
}
当使用命令行参数
--suitea
运行测试时,只有
A.spec.js
将运行,因此这是一个(或至少是我)所期望的

我现在想做的是在实际测试之前运行一些代码,这取决于我正在运行的套件,例如
login(usernameA,passwordA)
login(usernameB,passwordB)

如果我使用

before: function(capabilities, specs) {
    login(username, password)
}
在我的
wdio.conf.js
中,这一部分似乎在每个规范之前执行,并使用

beforeSuite: function(suite) {
    console.log(suite)
}
向我展示了它也在每个规范之前执行,并打印出来

{ type: 'beforeSuite',
  title: '<2nd level describe title>',
  fullName: '<top level describe title> <2nd level describe title>',
  file: 'pathTo/spec/some.spec.js' }
{type:'beforeSuite',
标题:“”,
全名:“”,
文件:'pathTo/spec/some.spec.js'}
我希望

  • 之前
    在启动任何测试套件之前运行
  • beforeSuite
    在每个套件之前运行,并且我可以通过某种方式访问要执行的套件的名称,以便调整登录参数等

如何实现这一点?

由于缺乏其他解决方案,我在
wdio.conf.js
中想出了一个“肮脏的黑客”,它读取命令行参数,从而确定正在运行哪个套件

before: function (capabilities, suite, specs) {
    let suiteNameCliParamIndex = process.argv.indexOf("--suite") + 1
    let suiteName = process.argv[suiteNameCliParamIndex]
    if(suiteName === 'thisSuite') {
        doThisStuff()
    } else {
        doOtherStuff()
    }
}