Проблема
Ошибка выдается, потому что browser.pages () преобразуется в массив всех открытых в данный момент страниц.Если мы посмотрим на это построчно, произойдет следующее (при условии, что вы начинаете с «свежего» браузера):
let pages = await browser.pages();
pages
теперь представляет собой массив с одной страницей (пустая страница по умолчанию)после запуска браузера).
await browser.newPage();
await browser.newPage();
await browser.newPage();
await browser.newPage();
Вы создаете четыре новые страницы, но это не приводит к автоматическому обновлению массива pages
.pages
по-прежнему содержит только одну страницу.
await pages[0].goto(p1, {waitUntil: 'load'});
Первый вызов работает, так как pages[0]
содержит страницу.
await pages[1].goto(p1, {waitUntil: 'load'});
Это приведет к ошибке (Cannot read property 'goto' of undefined
) какpages[1]
не определено.
Исправление (и улучшение кода)
Переместите строку let pages = await browser.pages();
вниз в коде, который будет вызываться перед использованием страниц.Чтобы улучшить свой код, вы также можете удалить один вызов browser.newPage()
, поскольку одна страница уже существует (сейчас у вас фактически есть пять открытых страниц), а для ускорения кода вы можете использовать Promise.all
:
const p1 = 'https://www.page.com/tab1';
const p2 = 'https://www.page.com/tab2';
const p3 = 'https://www.page.com/tab3';
const p4 = 'https://www.page.com/tab4';
const ptest = 'https://www.test.com';
await Promise.all([ // opens all pages at once
browser.newPage(),
browser.newPage(),
browser.newPage(),
]);
let pages = await browser.pages(); // now resolves with four pages
await pages[0].goto(p1, {waitUntil: 'load'});
await pages[1].goto(p1, {waitUntil: 'load'});
await pages[2].goto(p1, {waitUntil: 'load'});
await pages[3].goto(p1, {waitUntil: 'load'});