Проверьте наличие элемента и команду waitFor в Selenium

⚡ Умное резюме

Проверьте наличие элемента и выполните команды waitFor. Selenium IDE подтверждает, что страница содержит элементы и текст, ожидаемые тестом, и приостанавливает воспроизведение до тех пор, пока динамическое условие не станет истинным, после чего запускается следующий шаг.

  • 🔘 Проверка элементов: Функция verifyElementPresent возвращает TRUE, когда локатор соответствует чему-либо на странице, а verifyElementNotPresent является её точной противоположностью.
  • ☑️ Проверка текста: Функция verifyTextPresent выполняет поиск по всей странице и учитывает регистр символов, поэтому «Atlanta» никогда не совпадает с «atlanta».
  • Проверка должности: Функции verifyElementPositionLeft и verifyElementPositionTop сравнивают смещение элемента в пикселях от края страницы.
  • 🧪 Страница загружается: Команды `andWait`, такие как `clickAndWait`, приостанавливают выполнение скрипта до тех пор, пока не завершится загрузка новой страницы.
  • 🇧🇷 Динамический контент: Команды waitFor ожидают выполнения условия, а не загрузки страницы, что подходит для AJAX-экранов, которые никогда не перезагружаются.
  • 📊 Текущая IDE: Расширение для браузера переименовывает эти шаги и задает для каждой команды ожидания свой собственный тайм-аут в миллисекундах.

Убедитесь в наличии элемента и выполнении команды waitFor. Selenium IDE

Записано Selenium IDE Скрипт щелкает мышью и вводит текст, но сам по себе никогда не определяет, корректно ли работало приложение. Эту работу выполняют два семейства команд: проверить команды, которые проверяют состояние страницы, и ждать команды, которые приостанавливают выполнение до тех пор, пока страница не будет готова к проверке.

⚠️ Примечание о версиях: Приведённые ниже скриншоты взяты из оригинала. Firefox-плагин Selenium IDE, которая больше не распространяется, использует свои названия в стиле верблюжьего регистра (camelCase) и Selenese. Текущая IDE — это Chrome. Firefox и край расширение браузераОписанное здесь поведение по-прежнему актуально, но названия нескольких команд изменились — например, появилась карта.ping Таблица приведена далее в этой статье, и все исходные команды и скриншоты сохранены в точности в том виде, в котором они были опубликованы.

Проверка наличия элемента

Мы можем использовать следующие две команды для проверки наличия элемента:

  • проверитьЭлементПрезент – возвращает TRUE, если указанный элемент НАЙДЕН на странице; ЛОЖЬ, если иначе
  • проверитьЭлементнотпрезенте – возвращает TRUE, если указанный элемент НЕ НАЙДЕН нигде на странице; ЛОЖЬ, если оно присутствует.

Обе команды принимают элемент. локатор в Target поле — идентификатор, имя, CSS-селектор, текст ссылки или XPath выражение — и ни то, ни другое не нуждается в значении.

Тестовый скрипт ниже проверяет, присутствует ли текстовое поле UserName в Mercury Домашняя страница Tours, а текстовое поле First Name — нет. Текстовое поле First Name на самом деле является элементом, присутствующим на странице регистрации Mercury Туры, которых нет на главной странице.

Selenium Скрипт IDE, использующий метод verifyElementPresent для поля userName и verifyElementNotPresent для поля First Name.

Потому что это проверить команды вместо утверждать При выполнении команд в журнал записывается сообщение об ошибке, но оставшиеся шаги продолжают выполняться. Это различие подробно описано ниже.

Проверьте наличие определенного текста в команде в Selenium

Проверки существования элемента недостаточно — часто требуется подтвердить слова, отображаемые пользователю. Для этого существуют две текстовые команды.

  • проверитьтекстпредент – возвращает TRUE, если указанная текстовая строка НАЙДЕНА где-то на странице; ЛОЖЬ, если иначе
  • проверитьтекстнотпрезентент – возвращает TRUE, если указанная текстовая строка НЕ ​​НАЙДЕНА нигде на странице; ЛОЖЬ, если он был найден

Помните, что эти команды чувствительны к регистру.

В приведенном ниже журнале показано, что одна и та же страница была проверена дважды, и одна и та же фраза была написана по-разному.

Selenium В логе IDE видно, что проверка verifyTextPresent проходит успешно при маршруте из Атланты в Лас-Вегас, но завершается с ошибкой при том же маршруте.

В описанном выше сценарии запрос «Атланта — Лас-Вегас» обрабатывался иначе, чем «Атланта — Лас-Вегас», потому что буква «А» в слове «Атланта» в первом случае была заглавной, а во втором — строчной. При использовании команды verifyTextPresent для каждого из них один запрос прошел проверку, а другой — нет.

Проверка конкретного положения элемента

Дефекты компоновки редко приводят к сбоям в работе локатора, поэтому проверки наличия их не выявляют. Команды позиционирования устраняют этот пробел.

Selenium IDE указывает положение элемента, измеряя (в пикселях) расстояние от левого или верхнего края окна браузера.

  • проверитьЭлементПозиционЛефт – проверяет, соответствует ли указанное количество пикселей расстоянию элемента от левого края страницы. Это вернет FALSE, если указанное значение не соответствует расстоянию от левого края.
  • проверитьЭлементПозиционТоп – проверяет, соответствует ли указанное количество пикселей расстоянию элемента от верхнего края страницы. Это вернет FALSE, если указанное значение не соответствует расстоянию от верхнего края.

Приведённый ниже скрипт записывает ожидаемые смещения пикселей в столбец «Значение».

Selenium В IDE показано, как использовать функции verifyElementPositionLeft и verifyElementPositionTop с пиксельными значениями в столбце Value.

Отнеситесь к этим двум командам с осторожностью. Смещение в пикселях изменяется в зависимости от размера окна, уровня масштабирования и установленных шрифтов, поэтому жестко заданное число, которое проходит проверку на одном компьютере, может не пройти на другом.

Ожидание команд в Selenium

Команда проверки может проверять только то, что уже отображается на экране, поэтому проверка, выполненная слишком рано, завершится неудачей, даже если приложение работает. Команды ожидания решают эту проблему синхронизации.

Ниже приведены типы команд ожидания в Selenium

и команды ожидания

Это команды, которые будут ждать загрузки новой страницы, прежде чем перейти к следующей команде.

Примерами могут служить

  • нажмите и подождите
  • введитеAndWait
  • выберитеAndWait

Каждая из них представляет собой обычную команду действия с добавлением суффикса AndWait, как показано в приведенном ниже примере.

Записан шаг clickAndWait с удержанием кнопки Selenium Скрипт IDE выполняется до завершения загрузки следующей страницы.

команды ожидания

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

  • waitForTitle
  • ждатьForTextPresent
  • ждатьForAlert

Рассмотрим сценарий Facebook ниже.

Форма регистрации в Facebook, показывающая ссылку «Зачем мне указывать дату своего рождения?» перед тем, как на нее нажать.

Мы можем использовать комбинацию «click» и «waitForTextPresent», чтобы проверить наличие текста «Указание вашего дня рождения».

Selenium В IDE выполните следующие действия: нажмите кнопку waitForTextPresent, чтобы дождаться ввода текста с вашим днем ​​рождения.

Мы не можем использовать clickAndWait, поскольку при нажатии на кнопку «Почему мне нужно указывать свой день рождения?» страница не загружалась. связь. Если мы это сделаем, тест провалится.

Это же правило применяется к любому контенту, внедряемому с помощью скрипта, а не навигации, поэтому... Экраны, управляемые AJAX Практически всегда требуется использовать waitFor вместо andWait.

Команды Assert, Verify и waitFor в Selenium IDE

Новички часто выбирают не тот набор тестов, а затем удивляются, почему тестирование останавливается на первом же дефекте или почему оно сообщает о двадцати сбоях, хотя на самом деле все они... tracВернемся к единице. Три префикса отвечают на три разных вопроса.

Префикс Что она делает При неудаче Лучше всего подходит для
утверждать Проверяет состояние немедленно. Регистрирует ошибку и останавливает выполнение тестового случая. Предварительные условия — вход в систему должен быть успешным, прежде чем что-либо еще станет понятным.
проверить Проверяет состояние немедленно. Регистрирует ошибку и переходит к выполнению следующей команды. Независимые проверки, например, проверка нескольких этикеток на одной странице подтверждения.
ждать Опросы проводятся до тех пор, пока условие не станет истинным. После истечения тайм-аута регистрируется ошибка, затем выполнение продолжается. Всё, что отображается с задержкой — AJAX-ответы, индикаторы загрузки, диалоговые окна.

Практический шаблон объединяет все три: проверка страницы, на которую вы попали, ожидание элемента, который поступает асинхронно, а затем проверка каждого отдельного поля. Выполнение этих действий в таком порядке означает, что одна неработающая навигация останавливает тест на ранней стадии, в то время как несколько несоответствий внешнего вида выявляются за один запуск. Та же дисциплина применима и к Selenium Тесты, написанные на языке кода, эквивалентами которых являются жесткие утверждения, мягкие утверждения и явные ожидания.

Проверка и ожидание выполнения команд в текущем состоянии Selenium IDE

FirefoxIDE-плагин, создавший скриншоты выше, был выведен из эксплуатации, а набор команд был переработан для текущего расширения браузера. Несколько названий Selenese сохранились, некоторые были переименованы, а некоторые были удалены. В таблице ниже приведено соответствие команд, использованных в этой статье, их современным эквивалентам, взятым из официального источника. Selenium Справочник команд IDE.

Наследие командования Селене Команда в текущей IDE
проверитьЭлементПрезент проверить наличие элемента
проверитьЭлементнотпрезенте проверить, что элемент отсутствует
проверитьтекстпредент Проверка текста (применяется к локатору элемента, а не ко всей странице)
проверитьтекстнотпрезентент verify not text (scoped to an element locator)
verifyTitle проверить название
verifyElementPositionLeft / verifyElementPositionTop Аналогов не найдено — позиционные утверждения были отброшены.
clickAndWait, typeAndWait, selectAndWait Суффикс AndWait отсутствует — команда открытия уже ожидает загрузки страницы.
ждатьForElementPresent Ожидание появления элемента с временем ожидания в миллисекундах.
ждатьForAlert После появления диалогового окна подтвердите или проверьте текст предупреждения.

В повседневной работе наиболее важны два отличия. Во-первых, текущие команды ожидания — ожидание наличия элемента, ожидание видимости элемента, ожидание возможности редактирования элемента и их отрицательные аналоги — каждая требует явного времени ожидания в миллисекундах, поэтому медленный шаг больше не должен использовать один общий глобальный тайм-аут. Во-вторых, исчез поиск текста по всей странице: для проверки текста требуется локатор, что обычно обеспечивает более точную проверку.

Распространенные ошибки при использовании команд Verify и waitFor

Большинство проблем, о которых сообщается в связи с этими командами, не являются дефектами в IDE. Ниже приведен список наиболее часто встречающихся ошибок и способов их устранения.

  • Элемент существует, но проверка всё равно не пройдена. Присутствие и видимость — это разные состояния. Элемент, скрытый за правилом CSS, всё ещё присутствует в DOM, поэтому используйте проверку присутствия в паре с ожиданием видимости элемента, когда проверка зависит от того, увидит ли его пользователь.
  • Проверка текста не проходит, если формулировки выглядят идентичными. Неразрывные пробелы, пробелы в конце строки и фигурные апострофы, скопированные из проектного документа, приводят к ошибке точного совпадения. Вместо вставки необходимо вручную перепечатать ожидаемую строку.
  • Команда ожидания завершается по истечении времени ожидания на странице, которая явно загрузилась. Элемент обычно находится внутри iframe. Сначала выполните команду `select frame`, иначе локатор будет применен к неправильному документу.
  • Функция clickAndWait зависает в одностраничном приложении. Навигация не происходит, поэтому ждать нечего. Замените это щелчком мыши и соответствующей командой waitFor.
  • Проверка положения проходит локально, но завершается с ошибкой на сервере сборки. Размер экрана и отображение шрифтов различаются. Предпочтительнее использовать проверку присутствия или текста, либо задать явный размер окна в начале теста.
  • Вся система останавливается при первом же несоответствии. Вместо команды проверки была записана команда assert. Измените префикс, и программа будет сообщать обо всех ошибках, а не только о первой.

После того как скрипт преодолевает эти ловушки, следующим шагом обычно является... сохраняйте значения, полученные во время выполнения, в переменных. Таким образом, проверки сравнивают данные с реальными данными, а не с жестко закодированными строками.

Часто задаваемые вопросы (FAQ)

В устаревшей IDE использовался один общий таймаут для каждого шага waitFor, который изменялся с помощью команды setTimeout. Текущее расширение задает явное время ожидания в миллисекундах для каждой команды wait, поэтому медленная работа одного экрана больше не заставляет каждый второй шаг ждать так же долго.

Нет. Функция паузы всегда замирает на всё время загрузки страницы, поэтому она тратит время впустую, когда страница загружается быстро, и всё равно выдаёт ошибку, когда страница загружается медленно. Используйте её только для демонстрации шага во время показа, никогда не в наборе тестов, который вы планируете запускать многократно.

Нет. Наличие означает, что узел существует в DOM, что остается верным для элементов, скрытых с помощью CSS или расположенных за пределами экрана. Если проверка зависит от того, видит ли пользователь что-либо, добавьте проверку «ждать, пока элемент станет видимым» вместе с проверкой наличия.

Да, и текущая IDE этого требует. Команда проверки текста принимает локатор элемента плюс ожидаемую строку, что строже, чем старый поиск по всей странице, и предотвращает проверку несвязанного пункта меню, которая изначально не должна была выполняться.

Code Функция `export` преобразует каждую команду в эквивалентное выражение на целевом языке, поэтому шаг ожидания становится явным ожиданием WebDriver. Перед тем как доверять сгенерированному файлу, ознакомьтесь с ним, поскольку тайм-ауты и поведение при сбоях (мягкое или жесткое) не всегда сохраняются в неизменном виде после преобразования.

Модели машинного обучения анализируют исторические данные о выполнении операций и отмечают шаги, которые завершаются с ошибкой периодически, а не постоянно, что является признаком отсутствия ожидания. Исправление локаторов с помощью ИИ решает другую распространенную проблему, предлагая новый селектор при изменении разметки.

Он хорошо справляется с механической частью — превращая шаг ожидания в WebDriverWait с ожидаемым условием. RevОбратите внимание на выбранный тайм-аут и условие, поскольку сгенерированное условие присутствия часто должно быть условием видимости.

Поисковые запросы проверяются по текущему выбранному документу, а iframe — это отдельный запрос. Сначала выполните команду выбора фрейма, затем проверку и после этого вернитесь к основному документу, чтобы последующие шаги не выполнялись в неправильном контексте.

Подведем итог этой публикации следующим образом: