Nightwatch.js 设置值并执行
Nightwatch.js setValue and execute
Nightwatch 0.9.19
Node: 9.3.0
OS: darwin x64
exports.command = function (username, password) {
const TIMEOUT = 6000;
const USER_NAME = '[name="username"]';
const PASSWORD = '[name="password"]';
const BODY = 'body';
const FORM = 'form';
if (!username) {
username = this.globals.username;
}
if (!password) {
password = this.globals.password;
}
console.log('login', this.globals.baseUrl, username, password);
this.url(this.globals.baseUrl)
.waitForElementVisible(BODY, TIMEOUT)
.setValue(USER_NAME, username)
.getValue(USER_NAME, (result) => {
console.log(`=====> Username is: ${result.value} <=====`);
})
.waitForElementVisible(USER_NAME, TIMEOUT)
.waitForElementVisible(PASSWORD, TIMEOUT);
this
.execute(function (data) {
document.querySelector(PASSWORD).value = password;
return true;
}, [], null)
.pause(TIMEOUT)
.getValue(PASSWORD, (result) => {
console.log(`=====> Password is: ${result.value} <=====`);
})
.submitForm(FORM)
};
- 当我设置硬编码密码时:1q2w3e4r 就可以了。如果我使用变量,它不会。
- .setValue(password) ==> 结果:1q2we4r(缺失:3)
我看到您正在尝试使用以下代码在密码字段上设置一个值:
this
.execute(function (data) {
document.querySelector(PASSWORD).value = password;
return true;
}, [], null)
函数内的 PASSWORD
和 password
变量在执行时都是 undefined
。
这里的问题是,基本上您传递给 execute
的函数将在您正在测试的网页(浏览器 JavaScript 引擎)的上下文中 运行 而不是当前脚本的上下文 (node.js).
但是,如果您需要将一些参数传递给此类函数,您可以使用 execute()
的第二个参数,它基本上是传递给函数的参数数组。
修复上面的代码片段后,您应该得到以下内容:
this
.execute(function (PASSWORD, password) {
document.querySelector(PASSWORD).value = password;
return true;
}, [PASSWORD, password], null)
关于 execute()
的文档:http://nightwatchjs.org/api/execute.html
Nightwatch 0.9.19
Node: 9.3.0
OS: darwin x64
exports.command = function (username, password) {
const TIMEOUT = 6000;
const USER_NAME = '[name="username"]';
const PASSWORD = '[name="password"]';
const BODY = 'body';
const FORM = 'form';
if (!username) {
username = this.globals.username;
}
if (!password) {
password = this.globals.password;
}
console.log('login', this.globals.baseUrl, username, password);
this.url(this.globals.baseUrl)
.waitForElementVisible(BODY, TIMEOUT)
.setValue(USER_NAME, username)
.getValue(USER_NAME, (result) => {
console.log(`=====> Username is: ${result.value} <=====`);
})
.waitForElementVisible(USER_NAME, TIMEOUT)
.waitForElementVisible(PASSWORD, TIMEOUT);
this
.execute(function (data) {
document.querySelector(PASSWORD).value = password;
return true;
}, [], null)
.pause(TIMEOUT)
.getValue(PASSWORD, (result) => {
console.log(`=====> Password is: ${result.value} <=====`);
})
.submitForm(FORM)
};
- 当我设置硬编码密码时:1q2w3e4r 就可以了。如果我使用变量,它不会。
- .setValue(password) ==> 结果:1q2we4r(缺失:3)
我看到您正在尝试使用以下代码在密码字段上设置一个值:
this
.execute(function (data) {
document.querySelector(PASSWORD).value = password;
return true;
}, [], null)
函数内的 PASSWORD
和 password
变量在执行时都是 undefined
。
这里的问题是,基本上您传递给 execute
的函数将在您正在测试的网页(浏览器 JavaScript 引擎)的上下文中 运行 而不是当前脚本的上下文 (node.js).
但是,如果您需要将一些参数传递给此类函数,您可以使用 execute()
的第二个参数,它基本上是传递给函数的参数数组。
修复上面的代码片段后,您应该得到以下内容:
this
.execute(function (PASSWORD, password) {
document.querySelector(PASSWORD).value = password;
return true;
}, [PASSWORD, password], null)
关于 execute()
的文档:http://nightwatchjs.org/api/execute.html