Кукловод перейти на другую страницу - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь заставить мой скрипт перейти на новую страницу после успешного входа в систему, однако он пытается перейти на следующую страницу до завершения входа в систему.

  const page = await browser.newPage();

  page.goto('https://website/login');

  page.once('load', async () => {
    console.log('Page loaded!');
    // Login script here
  });

Я не могувыяснить, как перейти к новой ссылке после входа в систему, хотя мое первоначальное решение было просто сделать;

// go to stats
await page.goto('https://www.website/stats');

Однако, поскольку страница уже определена, на самом деле это ничего не ждет.

Возможно ли иметь функцию обратного вызова в функции .click () для перехода на новую страницу после?

1 Ответ

0 голосов
/ 27 декабря 2018

Правильный способ навигации с помощью щелчка и ожидания загрузки страницы - использовать Promise.all () и page.waitForNavigation () , например:

await Promise.all([
    page.waitForNavigation(),
    page.click('#some-link')
]);

Однако при навигации по page.goto () вышеприведенное не требуется, поскольку page.goto() автоматически ожидает загрузки страницы.

В обоих случаяхВы можете настроить ожидаемое событие, используя параметр waitUntil, который по умолчанию равен событию load.

page.goto (url [, options])

  • url URL для перехода на страницу.URL должен включать схему, например, https://.
  • options Параметры навигации, которые могут иметь следующие свойства:
    • timeout Максимальное время навигации в миллисекундах, по умолчанию 30 секунд, проход0 для отключения тайм-аута.Значение по умолчанию можно изменить с помощью метода page.setDefaultNavigationTimeout (timeout).
    • waitUntil Когда навигация считается успешной, по умолчанию используется load.При наличии массива строк событий навигация считается успешной после запуска всех событий....

Если объединить это, пример входа будет:

const page = await browser.newPage();

await page.goto('https://website/login');

await page.type('input[type="email"]', 'foo@example.com');
await page.type('input[type="password"]', 'pass1234');
await Promise.all([
    page.waitForNavigation(),
    page.click('button')
]);

// Now we are on the home page (or wherever we end up after logging in)

Некоторые другие примечания:

  • Возможно, вам придется использовать page.waitForSelector () или другие формы ожидания, если событие страницы load срабатывает до того, как поле input будет готово.
  • Youв качестве альтернативы можно отправить форму входа в систему, нажав клавишу Enter на клавиатуре.Для этого по-прежнему требуется шаблон Promise.all(), но это означает, что вам не нужен селектор для кнопки отправки.Вам может понадобиться .click() одно из полей input в зависимости от того, как реализована страница (например, если страница не использует autofocus).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...