Предыдущий ответ указал мне направление, как поймать ошибку асинхронной проверки или перенаправления.Но в моем сценарии в игру вступает iframe
, и это заставляет меня быть занятым весь день.Некоторые указатели в правильном направлении были бы действительно полезны, так как я не могу понять это правильно, даже если ошибка ясно указывает, что идет не так.
Сценарий:
- Вводоставлено пустым.Нажатие кнопки внутри iframe, и из асинхронного запроса возвращается ошибка проверки
- Вход имеет значение.Нажатие кнопки внутри iframe, и пользователь перенаправляется на страницу с надписью "yaay".
Ошибка, возникающая во втором сценарии, гласит waitForFunction failed: frame got detached
.Это имеет смысл, так как фрейм больше не существует ... Я нашел frame.isDetached()
, но он все еще продолжает выдавать ту же ошибку.Чего мне не хватает или как я могу использовать этот метод, чтобы он работал?
let frame = (await page.frames())[0];
...
for (let action of actions) {
if (action.type === '...') {
// ...
}
if (action.type === 'click') {
frame.click("#btn");
// works for scenario 1
await Promise.race([
page.waitForNavigation({ waitUntil: "networkidle2" }),
// ERROR THROWN HERE FOR SCENARIO 2
// `waitForFunction failed: frame got detached`
// the line below doesn't seem to work as well...
// frame.isDetached() ? Promise.resolve() : frame.waitForSelector(".error")
frame.waitForSelector(".error"),
]);
if (await frame.$(".error")) {
// there was an error
} else {
// the page changed
if (await page.waitForFunction('document.querySelector("body").innerText === "finished"')) {
// yeeey
}
}
}
}