Vue.js e2e 测试 nightwatch 如何手动输入

登录表单,有用户名、密码、验证码,用户名和密码是使用 browser.setValue 处理的,验证码如何处理呢?
在对应的测试用例里,如何让测试流程暂停并接收用户输入?获取到输入值后继续执行?

阅读 3.5k
2 个回答

自问自答一下吧:
自动化测试中遇到验证码,大致的解决方法有:关闭验证码、万能验证码、破解验证码、控制台同步输入等,如果是关闭验证码,就不算是模拟完全的开发环境了,如果是万能验证码,后端又会抱怨不安全,暴力破解看上去是正解,但能暴力破解了,后端估计也要崩溃了!控制台同步输入同事有演示(Pythone 版本),Node 版本没想到如何实现(菜)···!所以,如何在自动化中输入验证码困扰了我一下午。

后来,注意到 .pause()(官方文档) 这个方法,突然想到,为何不设置一个足够长的时间,让我们手动输入验证码,然后它计时结束后会继续完成提交?!果然,这个方法是可行的!但弊端是没有实现自动化测试,人工干预了。

module.exports = {
  'Login page can be render': function (browser) {
    const devServer = browser.globals.devServerURL
    const shotPath = 'test/e2e/reports/'

    // 打开登录页
    browser.url(`${devServer}/sign/login`).maximizeWindow()
    browser.waitForElementVisible('.app-login-form', 5000)
    browser.saveScreenshot(`${shotPath}/signLogin.jpg`)

    // 填写用户名
    browser.setValue('input[name="username"]', '136******44')

    // 填写密码
    browser.setValue('input[name="password"]', '111111')

    // 填写验证码
    browser.pause(10000) // 给与 10 秒的时间输入验证码

    // 提交表单
    browser.click('#submit')

    // 登录成功
    browser.waitForElementVisible('.uc', 5000)
    browser.saveScreenshot(`${shotPath}/ucHome.jpg`)
    browser.pause(1000)

    // 切换页面
    browser.click('.menu-collapse > .group.active > .subs > ul > li.current + li')
    browser.waitForElementVisible('.tabs', 5000)
    browser.pause(1000)
    browser.end()
  }
}

最近在写一个用 js 封装百度登陆模块的练习,也在纠结这个

本地测试还好,发到 ravisci 上测试,又要验证码,又要短信验证的

尝试了模拟 http 数据,因为请求的很多初始化参数都是随机的,没成功

后面谷歌搜了一通,看了些文章,加深了下对测试的理解

之前是把整个程序当成一个整体去测试的,那中间有很多随机的数据,会把测试变的不可控

暂时想的是把模块,甚至是方法单独拎出来做测试,然后把需要引用的参数,或者模块用模拟数据和模拟函数去代替,让输入变得可控,这样结果也就好测试了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题