我正在使用 Playwright 和 JavaScript 测试 UI。我的代码找到了一个输入元素,该元素有时可以是下拉菜单,有时是文本,有时是日期。为了解决这个问题,我分两步输入值。首先,我填充文本,然后单击 tab 键以调用格式化元素中的值的 JavaScript。
await page.fill("#myID", inputText);
await page.keyboard.press('Tab'); // this line trigger the JS
// continue to the next element
问题是,它没有等待 JavaScript 完成。如何在代码继续之前等待 JS 完成。
最佳答案
使用 page.waitFor...
功能
当满足以 page.waitFor
开头的某些条件时,剧作家提供了许多功能。 (例如 page.waitForFunction
)。大概page.waitForFunction
是最通用的,因为您可以传递一个等待满足特定条件的自定义函数。
或者,使用超时
我想你可以使用 setTimeout
与 page.evaluate
在页面上下文中等待其他 JavaScript 运行:
await page.evaluate(() => {
// if this doesn't work, you can try to increase 0 to a higher number (i.e. 100)
return new Promise((resolve) => setTimeout(resolve, 0));
});
这可能相当于 page.waitForTimeout(0)
,但我不确定。请注意,他们建议不要使用 page.waitForTimeout
在生产中。
关于javascript - 如何在剧作家中等待 JavaScript 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66251670/