javascript - 如何等待按钮启用并用 puppeteer 单击?

标签 javascript async-await puppeteer end-to-end

我有一个包含两个字段用户名和密码的表单。输入用户名后,将启用下一个按钮,单击它后,它会显示一个密码字段,输入后,它会再次启用下一个按钮。如何在表单更新之间等待按钮启用?

我尝试了以下方法,一种有注释,另一种没有。两者都不适合我。


(async () => {
    const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://localhost:9000/start#!');

await page.type('#login-form-un-field', 'xxxx')
// await page.waitForTarget('#default-next-btn:not([disabled])')
await page.$eval('#default-next-btn:not([disabled])', elem => elem.click());
// const btnNext = await page.$('#default-next-btn');
// btnNext.click();
await page.type('login-form-passcode', '1234');
await page.click('#default-next-btn');
await browser.close();
})();```

Thanks for the help in advance.

Edit: the button is always present on the page. It is just disabled while form entries are being validated.

最佳答案

等待按钮(或输入)不再被禁用,即 <button id="id" disabled>使用:not([disabled])在传递给 waitForSelector 的选择器字符串中。

示例:

page.waitForSelector('button#id:not([disabled])');

关于javascript - 如何等待按钮启用并用 puppeteer 单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882543/

相关文章:

javascript - 确定有多少行与正则表达式匹配?

javascript - 如何停止内容跳转? (键入 js)

javascript - 在 JavaScript 中使用数组包含问题

.net - Mongodb .net 异步等待

node.js - Puppeteer 由于 Node 模块错误而失败

javascript - 错误 : Evaluation Failed: ReferenceError: util is not defined

node.js - 在 Chromium 中传递 "Your connection is not private"页面

javascript - 如何在 Three.js 中使用 PCF(软)阴影?

node.js - 返回类型为 undefined 的一个 Promise 会感染 Promise.all 中的其他 Promise 并带有 undefined

javascript - 如何处理 Node.js expressjs 中异步对象方法中未处理的 promise 拒绝?