【发布时间】:2017-03-29 15:46:55
【问题描述】:
我在 Nightwatch 中实现页面对象时遇到问题。假设我有一个登录场景。我需要滚动到元素 - 我正在使用 thar 执行功能。
module.exports = {
'Login' : function (browser) {
browser.url(this.launchUrl)
.setValue('input[name=username]', 'admin')
.setValue('input[name=password]', 'password')
.execute(function () {
document.querySelector('input[type=submit]').scrollIntoView();
}, [])
.click('input[type=submit]');
browser.end();
}
}
我想像这样将这个登录代码重构为页面对象
module.exports = {
url: function() {
return this.api.launchUrl;
},
commands: [scrolling],
elements: {
usernameField: {
selector: 'input[name=username]'
},
passwordField: {
selector: 'input[name=password]'
},
submit: {
selector: 'input[type=submit]'
}
}
};
我也想“隐藏”这个执行命令并将其打包成命令,如下所示:
var scrolling = {
scroll: function(){
return this.execute(function () {
document.querySelector(input[type=submit]').scrollIntoView();
}, []);
}
};
不幸的是,执行命令似乎不适用于页面对象。
当我想使用页面对象时,如何通过执行 JavaScript 代码来解决这个问题?怎么封装?
【问题讨论】:
-
只是一个可能有用的注释。在我的情况下,
execute仅在作为字符串传递时才有效。例如.execute('document.querySelector('input[type=submit]').scrollIntoView();') -
但是你是在主测试文件(我的第一段代码)中使用它还是使用像这里这样的页面对象:nightwatchjs.org/guide#page-objects? execute() 可以包含函数或字符串nightwatchjs.org/api/execute.html
-
我检查了建议的字符串,但没有解决问题。
-
api 文档中的页面对象中有一个可访问方法的列表:github.com/nightwatchjs/nightwatch/wiki/…
标签: javascript automated-tests frontend nightwatch.js pageobjects