Кукольник page.waitforNavigation не работает в 1.8? - PullRequest
0 голосов
/ 01 октября 2018

У меня проблемы с тем, чтобы заставить кукловода ждать навигации.

Согласно документации Здесь Пример:

const [response] = await Promise.all([
  page.waitForNavigation(), // The promise resolves after navigation has finished
  page.click('a.my-link'), // Clicking the link will indirectly cause a navigation
]);

Мой код:

const element = await page.waitForXPath(`${lineSelector.xpath}//a[contains(text(), 'Go')]`)

const [response] = await Promise.all([
  page.waitForNavigation(),
  element.click()
]);

Все работает .. кроме того, что не ждет навигации.Я перепробовал все различные варианты:

  • load - считать навигацию завершенной, когда событие load запущено.
  • domcontentloaded - считать навигацию завершенной, когда событие DOMContentLoaded запущено,
  • networkidle0 - считается, что навигация завершена, если не более 0 сетевых подключений в течение не менее 500 мс.
  • networkidle2 - считается, что навигация завершена, если не менее 2 сетевых подключений в течение как минимум 500 мс.

Я даже пытался перевернуть их другим способом, прежде чем сделать паузу вЕсли что-то нужно разрешить.

На самом деле это не «переход» на другую страницу, а выполнение запросов на стороне клиента для загрузки части страницы, но я решил, что мониторинг netowrk (неактивный или нет) - долженподобрать подобные вещи.

Я не могу полагаться на смену селектора или мутацию dom, потому что они могут быть точно такими же от одного клика до следующего.

Это ошибка?Или я что-то упустил?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 01 октября 2018

На самом деле это не «переход» на другую страницу, а выполнение запросов на стороне клиента для загрузки части страницы, но я решил, что мониторинг netowrk (неактивный или нет) - должен подобрать такую ​​вещь.

Ну нет!waitForNavigation означает именно то, что он говорит.Он ждет навигации.Таким образом, вы не можете ожидать, что он будет вести себя по-другому.

Это будет действовать так, когда,

  • происходит навигация (не изменение URL, а фактический запрос навигации)
  • есть использование истории API.

Если вы хотите просматривать запросы AJAX, вы можете использовать

Оба имеют аналогичный метод для мониторинга запроса AJAX.Это может быть либо строка, либо функция.

Вот как это реализовать,

await page.waitForRequest(request => request.url() === 'http://example.com' && request.method() === 'GET');

, которая будет ожидать запроса с указанным URL-адресом.При необходимости вы можете использовать любой вид проверки.

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