javascript - 运行代码,例如登录,取决于执行哪个测试套件

标签 javascript selenium-webdriver

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'
        ]
    },
    [...]
}

当使用命令行参数 --suite A 运行测试时,只有 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' }

我希望

  • before 在任何测试套件开始之前运行
  • beforeSuite 在每个套件之前运行,并且我可以通过某种方式访问​​要执行的套件的名称,因此我可以进行调整,例如登录参数

我怎样才能做到这一点?

最佳答案

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

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

关于javascript - 运行代码,例如登录,取决于执行哪个测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086711/

相关文章:

java - 无法实例化类

php - 如何使用 Javascript 获取按钮值

javascript - 在嵌套 $.each 循环期间将 json 对象显示到 html 页面中

python Selenium : Can't find element by xpath when browser is headless

python - 在 Python 3.6 中 - 使用 XPath 表达式获取文本

selenium-webdriver - 不允许的复合类名称错误Webdriver

javascript - addEventListener 到许多元素,用类选择它们

javascript - 将对象拖到父对象之外

javascript - 如何使用 dataTable 打印按钮添加要打印的元素?

c# - 当您将文本转换设置为大写的链接时,LinkText 不起作用