gpt4 book ai didi

javascript - Nightwatch.js setValue 并执行

转载 作者:行者123 更新时间:2023-11-28 14:39:36 26 4
gpt4 key购买 nike

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)
};
  1. 当我设置硬编码密码:1q2w3e4r 时,它起作用了。如果我使用变量,则不会。
  2. .setValue(password) ==> 结果:1q2we4r(缺失:3)

最佳答案

我发现您正在尝试使用以下代码在密码字段上设置值:

this
.execute(function (data) {
document.querySelector(PASSWORD).value = password;
return true;
}, [], null)

函数内的 PASSWORDpassword 变量在执行时都是未定义

这里的问题是,基本上,您传递给 execute 的函数将在您正在测试的网页(浏览器 JavaScript 引擎)的上下文中运行,而不是在当前脚本(节点.js)。

但是,当您需要向此类函数传递一些参数时,您可以使用 execute() 的第二个参数,它基本上是传递给函数的参数数组。

修复上面的代码片段后,您应该得到以下内容:

this
.execute(function (PASSWORD, password) {
document.querySelector(PASSWORD).value = password;
return true;
}, [PASSWORD, password], null)

有关execute()的文档:http://nightwatchjs.org/api/execute.html

关于javascript - Nightwatch.js setValue 并执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48547542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com