Как избежать «несогласованной проверки кадра» при асинхронной проверке или перенаправлении с помощью Puppeteer? - PullRequest
1 голос
/ 11 июля 2019

Предыдущий ответ указал мне направление, как поймать ошибку асинхронной проверки или перенаправления.Но в моем сценарии в игру вступает iframe, и это заставляет меня быть занятым весь день.Некоторые указатели в правильном направлении были бы действительно полезны, так как я не могу понять это правильно, даже если ошибка ясно указывает, что идет не так.

Сценарий:

  1. Вводоставлено пустым.Нажатие кнопки внутри iframe, и из асинхронного запроса возвращается ошибка проверки
  2. Вход имеет значение.Нажатие кнопки внутри 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 
           }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...