#javascript #xpath #automation #cucumber #webdriver-io
#javascript #xpath #автоматизация #огурец #webdriver-io
Вопрос:
Я хочу автоматизировать https://demoqa.com / веб-страница, сначала я хочу выбрать карточку виджетов и нажать на эту карточку, как я могу это выбрать, если классы для каждой карточки одинаковые, только текст не совпадает. Итак, я хотел использовать это get getWidgetButton() { return $('//h5[normalize-space(text()) = "Widgets"]');
, но когда я запускаю это When('user press on Widgets button', ()=>{NavigationPage.getWidgetButton.click(); });
, я получаю сообщение об ошибке
- Средство выбора данных виджета, когда пользователь нажимает на кнопку виджетов [chrome 87.0.4280.88 windows # 0-0] щелчок элемента перехвачен: Элемент… не доступен для просмотра в точке (709, 669). Другой элемент получит щелчок : …
Как я могу выбрать элемент, который я хочу? Спасибо!
Ответ №1:
существует несколько способов сделать это, один из способов — получить innerText
из HTML element
или получить nth-child
с помощью querySelector
Ответ №2:
Я предполагаю, что размер окна вашего браузера слишком мал, поэтому, когда вы пытаетесь нажать кнопку «Виджеты», он закрывается нижним колонтитулом страницы. Вам нужно развернуть окно браузера или использовать опцию для запуска браузера в максимальном размере.
Комментарии:
1. Я сделал это, но это не помогает, нижний колонтитул по-прежнему закрывает кнопку виджета, как я могу прокрутить вниз до виджетов?
2. @GintarsLazda попробуйте реализовать scrollIntoView
Ответ №3:
Сначала попробуйте подождать: используя element.waitForClickable(), вам не нужно прокручивать, WebdriverIO может щелкнуть по элементу, если он отображается на экране, без выполнения прокрутки.
Селекторы действительно упрощены в WebdriverIO. Вы можете использовать css selector большую часть времени, и этого будет достаточно. Есть 2 способа выбрать свой элемент:
- если вы хотите выбрать несколько элементов с одинаковым именем класса, используйте
$$
WebdriverIO, и он вернет массив элементов. Затем вы можете получить доступ к элементу по номеру индекса. Чтобы выбрать заголовки всех виджетов, используйте следующий код:get widgetHeaders () { return $$('.card h5') }
ваша карточка виджета является 4-м элементом, что означает, что его индекс равен 3. Таким образом, вы можете получить к нему доступ, нажав вот такwidgetHeaders[3].click();
. Для получения более подробной информации: найдите элементы в WebdriverIO - Вот как вы можете найти отдельный элемент, используя внутренний текст:
get getWidgetButton() { return $("h5='Widgets']");
Или сначала найдитеh5
тот, который содержит ‘widget’:get getWidgetButton() { return $("h5*='Widgets']");
Для получения дополнительной информации: найдите элемент по внутреннему тексту или по частичному тексту
ПРИМЕЧАНИЕ: В качестве QA вашим приоритетом должно быть обнаружение дефекта. На веб-сайте, которым вы поделились, есть проблема с положением нижнего колонтитула. Нижний колонтитул появился над телом и покрыл 60 пикселей тела внизу. QA должен сообщить об этой проблеме, и она должна быть исправлена разработчиком. Я думаю, самый простой способ исправить это будет что-то вроде этого: .body-height { min-height: 100%; padding-bottom: 70px; }