Nightwatch页面对象模型中如何重写自定义函数?
嘿,要重写这个函数实现定制化需求其实很简单,核心就是基于你的业务需求,给原有的点击逻辑添加额外操作,或是调整现有步骤。我给你举几个常见的定制场景和对应的写法:
场景1:添加元素等待,提升操作稳定性
原函数直接点击元素,可能会遇到元素还未加载完成就执行点击的报错情况。我们可以加上waitForElementVisible确保元素可交互后再操作:
module.exports = { url: 'http://localhost:63916/Login/Login', commands: [{ navigateToImportBatch() { // 等待importManager元素可见(超时10秒) this.waitForElementVisible('@importManager', 10000) .click('@importManager') // 等待importBatch元素可见后再点击 .waitForElementVisible('@importBatch', 10000) .click('@importBatch'); // 返回页面对象实例,保持链式调用能力 return this; } }] };
场景2:添加日志输出,方便调试流程
如果需要定位操作中的问题,可以在关键步骤添加日志输出:
module.exports = { url: 'http://localhost:63916/Login/Login', commands: [{ navigateToImportBatch() { this.api.log('开始导航到导入批次页面'); this.click('@importManager') .api.log('已点击导入管理器按钮'); this.click('@importBatch') .api.log('已点击导入批次按钮'); return this; } }] };
场景3:添加页面跳转验证,确保操作结果正确
如果需要确认跳转后的页面符合预期,可以在最后加上URL验证逻辑:
module.exports = { url: 'http://localhost:63916/Login/Login', commands: [{ navigateToImportBatch() { this.click('@importManager') .click('@importBatch'); // 验证当前页面URL包含预期路径 this.assert.urlContains('/Import/Batch'); return this; } }] };
小提醒
原函数最后返回this.api,其实更推荐返回this(页面对象实例),这样后续能继续链式调用页面对象的其他方法,比如page.login().navigateToImportBatch().someOtherMethod(),使用起来更灵活。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

