Элемент не отображается после навигации с помощью драматурга

Я использую драматурга для автоматизации своего браузера.

Я нажимаю гиперссылку, которая ведет на Google.com, и там я хочу убедиться, что кнопка поиска Google существует после навигации. Вот мой код.

const textToClick = "Visit Google"
const textToVerify = "Google Search"
const elements = await page.$$(`text=${textToClick}`)
await element[0].click()
const elements = await page.$$(`text=${textToVerify}`)
const elementLength = elements.length
console.log("Element Length::",elementLength, ":: TexToFind::",textToVerify)

Когда я запускаю его с тестом мокко, кнопка поиска Google не обнаруживается.

Но когда я запускаю тот же код через отладчик Visual Studio в основном файле записи узла (main.js); Я могу найти кнопку поиска Google.

Вот вывод отладчика драматурга из тестового прогона мокко:

pw: api = ›page.goto start + 0 мс
pw: api переход к файлу: /// C: /devel/devspace/js/myAutomation/test/src/sampleApp.html, ожидание загрузки [] + 3 мс
pw: api перешел к файлу: /// C: /devel/devspace/js/myAutomation/test/src/sampleApp.html [] + 348 мс
pw: api domcontentloaded событие запущено [] + 7 мс
pw: событие загрузки API сработало [] + 276 мс
pw: api ‹= page.goto выполнено + 6 мс
pw: api =› elementHandle.click start + 364 мс
pw : api пытается elementHandle.click action [] + 2 мс
pw: api ожидает, пока элемент станет видимым, включен и не движется [] + 2 мс
pw: элемент api виден, включен и не перемещается [ ] + 479 мс
pw: прокрутка api при необходимости [] + 1 мс
pw: прокрутка api завершена [] + 63 мс
pw: api проверка того, что элемент получает события указателя в (358.64,558.1 ) [] + 66 мс
pw: элемент api действительно получает события указателя [] + 188 мс
pw: api выполняет действие elementHandle.click [] + 2 мс
pw: api elementHandle.click action done [ ] + 83 мс
pw: api в ожидании завершения запланированной навигации [] + 3 мс
pw: api перешел на https://www.google.com/ [] + 293 мс
pw: api navigations завершили [] + 46 мс
pw: api ‹= elementHandle.click успешно + 2 мс
спящий
спящий завершен
длина элемента :: 0 :: TexToFind :: Google Search
1) Проверка функциональности щелчка по гиперссылке

Вы заметите, что длина элемента равна нулю, что означает, что кнопка поиска Google не найдена

Что происходит с тестом мокко, который делает элемент недоступным для поиска, или есть что-то фундаментальное, связанное с гиперссылками, которое необходимо обрабатывать при проверке элементов после того, как щелчок по гиперссылке приводит вас на новую веб-страницу?


person katch    schedule 27.07.2020    source источник
comment
(1) Откроется ли страница Google в новой вкладке, если вы запустите свой скрипт с мокко? (2) Вы уверены, что страница Google отображается на английском языке при открытии с помощью мокко?   -  person theDavidBarton    schedule 27.07.2020
comment
да, Google открывается на английском языке, а также открывается в той же вкладке, а не в новой.   -  person katch    schedule 27.07.2020
comment
Разве область видимости не различается между запуском отладчика mocha и vs? Я вижу, у вас есть два const elements, может быть, мокко все еще ищет textToClick, когда он считает 0 как elements.length.   -  person theDavidBarton    schedule 27.07.2020
comment
возможно. Есть ли способ проверить объем?   -  person katch    schedule 27.07.2020
comment
Просто предположение, но это можно проверить, переименовав второй elements в elements2, если он сработает, то проблема заключалась в неуникальном постоянном имени для мокко.   -  person theDavidBarton    schedule 27.07.2020
comment
хорошо, это плохая ошибка копирования и вставки. это две разные переменные elements1, elements2.   -  person katch    schedule 27.07.2020
comment
@katch, не могли бы вы поделиться более полным фрагментом кода? Я пытался воспроизвести, но не удалось. Кроме того, я бы рекомендовал использовать page.waitForSelector вместо page. $$, поскольку первый ожидает селектора и возвращает дескриптор элемента. Если вы состоите в слабом сообществе Playwright, я буду рад помочь вам в обмене мгновенными сообщениями.   -  person arjunattam    schedule 27.07.2020
comment
Спасибо, Арджун за совет. Эту слабую ссылку на гитхабе драматурга найти сложно. Теперь я нахожусь в сообщении о группе   -  person katch    schedule 28.07.2020


Ответы (1)


Щелчок по первой ссылке вызовет навигацию. Поэтому вам нужно дождаться, пока страница перейдет в Google. Вы можете сделать что-то вроде этого:

await Promise.all([elements[0].click(), page.waitForNavigation()]);
person hardkoded    schedule 27.07.2020
comment
pw: api-навигация завершена [] + 46 мс pw: api ‹= elementHandle.click успешно + 2 мс указывает, что навигация прошла успешно. после чего я пытаюсь проверить. На мой взгляд, нам не нужно ждать, как это видно при отладке. - person katch; 27.07.2020
comment
При отладке вы даете браузеру несколько миллисекунд для перехода на следующую страницу. - person hardkoded; 27.07.2020
comment
Я тоже ввел сны, это тоже не помогло. Я только что попробовал дождаться навигации, которая тоже не помогла - person katch; 27.07.2020
comment
хорошо, это действительно из-за того, что вы не дожидались завершения навигации. - person katch; 28.07.2020