JavaScript编写Nightwatch测试用例时console.log不输出及用例无响应问题
问题1:testCase1中console.log("Hello")未在控制台打印的原因
- Nightwatch日志配置拦截:检查
nightwatch.conf.js配置文件中的silent参数,如果该参数设为true会屏蔽所有控制台普通输出;另外如果log_level配置为warn/error级别,info级别的console.log内容也不会被展示。 - 测试用例未触发执行:如果执行测试时使用了
--grep参数过滤用例、或者用例命名不符合你配置的测试用例匹配规则,会导致testCase1根本没有被运行,自然不会产生输出。 - 日志被重定向:如果配置了日志输出到本地文件,控制台不会同步展示打印内容,可到配置的日志存储路径下查找对应日志文件确认内容。
问题2:testCase2执行无操作动作的原因
- 异步命令队列提前终止:Nightwatch的所有browser指令都是异步入队执行的,你直接用同步的
forEach遍历插入命令,测试用例主线程会在命令执行前就结束运行,导致队列中的点击操作没有被实际执行。建议将遍历逻辑改为for...of配合async/await,或者用Nightwatch提供的perform()方法包裹遍历逻辑,保证命令按顺序执行完成。 - XPath元素定位失败:你使用的
//span[text() = "${value}"]是精确文本匹配规则,如果目标span标签的文本存在前后空格、包含子元素、文本大小写不匹配,都会导致定位不到元素,若你同时开启了静默错误配置,就会出现无操作也无报错的情况。可以先给click指令加个waitForElementVisible前置判断,验证元素是否能被正常定位。 - 缺少测试结束标识:如果测试用例最后没有调用
browser.end(),也没有通过done回调通知框架测试执行完成,框架可能会提前终止用例,导致未执行完操作队列。
内容的提问来源于stack exchange,提问作者Dhruv Bhatnagar
相关产品推荐
相关产品推荐

