Я использую NodeJS и TestCafe для создания теста E2E.
Мы начали использовать BrowserStack для выполнения кросс-браузерных тестов, и я пытаюсь запустить скрипты для Windows7: firefox и Windows10: firefox.
Когда я запускаю TestCafe с этими параметрами, тогда и только тогда я получаю ошибку. Поэтому я не вижу этого сбоя при запуске на Samsung Galaxy S9: chrome или Samsung Galaxy S9: firefox или Windows 10: edge или Windows 7: chrome.
Наш сайт разработан с учетом размеров окна браузера. Итак, если окно маленькое, мы видим кнопку меню гамбургера, которая расширяется, чтобы предоставить такие параметры, как «Вход», «Выход», «Проекты» и т. Д.. Если окно большое или (широкое), то все отображается в строке заголовка.
Как я уже сказал, все это отлично работает во многих разных браузерах, но не в Firefox в Windows 7 или 10. Я попытался адаптировать свой код сценария для работы с более сложным сценарием: перехватить кнопку меню гамбургера, если она есть, и игнорировать ее. если его нет в DOM. Я НЕ хочу иметь в своем решении какой-либо код, который проверял бы параметры / свойства высокодинамичного сценария тестирования, такие как разрешение экрана или конкретный браузер или версия браузера, версия ОС или ОС, и т. д. Итак, НИЧЕГО вроде:
if (OperatingSystem === 'Windows' && Browser === 'firefox')
- Ой, больно даже писать эту строку кода выше.
Так что это вполне может быть специфическим для браузера сценарием, но опять же, он отлично работал с Samsung Galaxy Tab 4: firefox и Samsung Galaxy S9: firefox.
Вот что происходит: поскольку я запускаю сценарий на рабочем столе Windows 7 и 10 с помощью firefox, меню hambuger не отображается на экране. Однако условие:
if (await navbar.hamburgerMenu.exists === true) {
// Execution gets here, even though there is NO hamburgerMenu button.
// The next line triggers an error that kills the script.
if (await navbar.hamburgerMenu.visible) {
// The above line of code returns an error:
// Cannot obtain information about the node because the specified selector does not match any node in the DOM tree.
// Then how come it passed the hamburgerMenu.exists === true condition?!
Я также должен добавить, что селектор hamburgerMenu определяется с помощью visibilityCheck: true
Хотя знаю, что в данном случае на результат это не влияет, потому что
if (Selector('blablabla', {( visibilityCheck: true )})
отличается тогда
if (Selector('blablabla').visible === true)
Я уже знаю, что первое не разрешается в условии filter-if, как оно используется выше, а рекомендуемое условие filter-if - второе, поэтому я его использовал.
Однако первое условие if в блоке кода должно было предотвратить переход кода ко второму условию if в блоке кода, поскольку на самом деле кнопка гамбургер-меню фактически не отображается для этой комбинации ОС и браузера.
Единственное, о чем я могу думать, это то, что, возможно, опция .visible для веб-элементов в Windows Desktop: Firefox каким-то образом возвращает другой результат или поведение, чем если бы это был Android: firefox или Desktop: chrome или Android: chrome.
Я не хочу использовать метод document.getElementByID, поскольку это технически не является селектором CSS, и все наше предприятие стандартизировано на селекторе CSS, поэтому все, что идет по DOM, кроме селектора CSS, не пройдет мимо нашего процесса проверки кода. в любом случае.
Итак, я снова ищу решение общего назначения, которое будет работать во всех этих сценариях / ситуациях. Есть мысли или идеи? Заранее спасибо!!
Связанный (но другой) вопрос: TestCafe - Как проверить, существует ли веб-элемент или нет, не провалив тест? TestCafe - Как проверить, существует ли веб-элемент или нет, не провалив тест?