Как работать со скрытыми элементами в автоматизированном тестировании WebUI? Как понять три элемента метода ожидания?
Как работать со скрытыми элементами в автоматизированном тестировании WebUI? Как понять три элемента метода ожидания?

1 Как работать со скрытыми элементами в автоматизированном тестировании?

Во время собеседований мы часто сталкиваемся с вопросом: «Как работают скрытые элементы?». Давайте посмотрим, как ими управлять?

1.1 Способ реализации

  • Действия на скрытые факторы,Обычная операция осуществляется черезJSСкрипт находит элемент,Получить соответствующий объект элемента,пройти еще разremoveAttributeиsetAttributeСуществует два метода завершения удаления или сброса атрибутов.копироватьдействовать,Просто сделайте текущий элемент отображаемым.

1.2 Вариант реализации

  • Ниже приведена настроенная HTML-страница. Эта страница представляет собой страницу входа, на которой имя пользователя и кнопка входа скрыты следующим образом:
Язык кода:python
кодКоличество запусков:0
копировать
<html>
<body>
	имя пользователя:<input id="user_name" name="username" type="hidden" /><br>
	пароль:<input id="pass_word" name="password" type="text" /><br>
	<button type="button" name="login" class="login_but" style="display:none;" />
</body>
</html>

1.3 Идеи реализации

Язык кода:python
кодКоличество запусков:0
копировать
#В основном используйте JS-скрипт для изменения значения атрибута тега
hi_name = "document.getElementByID('user_name').setAttribute('type', 'text')"
print(driver.execute_script(hi_name))

driver.find_element_by_id('user_name').send_keys("admin")
print(driver.find_element_by_name("логин"))

driver.execute_script("document.getElementsClassName('login_but')[0].removeAttribute('style')")

2 Как понять три элемента метода ожидания?

При автоматическом тестировании вы столкнетесь с такими факторами, как нестабильная среда и нестабильная сеть. В это время вам может потребоваться контролировать скорость выполнения сценария, поэтому вам необходимо использовать операцию ожидания элемента. На самом деле, это не обязательно просто вопрос ожидания. У каждого есть свои плюсы и минусы. Вот некоторые мнения только для справки.

2.1 Принудительное ожидание

  • метод:
Язык кода:python
кодКоличество запусков:0
копировать
time.sleep(s)
# s представляет конкретное время в секундах.
  • значение:Экспресс ожиданиеsсекунды спустя,Сделайте следующий шаг。Используйте напрямуюpythonвстроенныйtimeвызов модуляsleepПросто метод。
  • иллюстрировать:Вынужденное ожидание еще называют принудительной спячкой. Областью действия является текущий сценарий. Если строк кода, требующих ожидания настроек, немного, то каждая строка кода должна выполнить одну и ту же операцию настройки.
  • Преимущества и недостатки:

Преимущества и недостатки

иллюстрировать

преимущество

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

недостаток

Уровень дублирования кода высок и влияет на скорость выполнения кода. Время ожидания невозможно установить точно. Если оно слишком велико или слишком продолжительное, оно кажется неуместным.

  • Пример:
Язык кода:python
кодКоличество запусков:0
копировать
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://localhost/zentao/user-login.html")

user_name = "$('input:first').val('admin')"
driver.execute_script(user_name)
time.sleep(0.5)

pass_wd = "$(':password').val('ZenTao123456')"
driver.execute_script(pass_wd)
time.sleep(1)

2.2 Неявное ожидание

  • метод:
Язык кода:python
кодКоличество запусков:0
копировать
driver.implicitly_wait(s)
# s представляет конкретное время в секундах.
  • значение:существоватьsво времени,Загрузка страницы завершена,Сделайте следующий шаг,Вызывается непосредственно через объект драйвера браузера.
  • иллюстрировать:неявное ожидание, также известное как умное ожидание,Также называется глобальным ожиданием. Указывает, что он не будет выполнен до тех пор, пока не будут загружены все элементы на всей странице.,Страница будет постоянно обновляться в соответствии с внутренней заданной частотой, чтобы продолжить загрузку и определить, загружен ли текущий исполняемый элемент.

Если элемент загружен до установленного времени, он не будет продолжать ждать и перейдет к следующему шагу.

  • Преимущества и недостатки:

Преимущества и недостатки

иллюстрировать

преимущество

Он работает на протяжении всего жизненного цикла скрипта и его нужно установить только один раз.

недостаток

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

  • Пример:
Язык кода:python
кодКоличество запусков:0
копировать
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://localhost/zentao/user-login.html")
driver.implicitly_wait(10)

user_name = "$('input:first').val('admin')"
driver.execute_script(user_name)

pass_wd = "$(':password').val('ZenTao123456')"
driver.execute_script(pass_wd)

2.3 Явное ожидание

  • метод:
Язык кода:python
кодКоличество запусков:0
копировать
# Импортировать пакет
from selenium.webdriver.support.wait import 
# или
from selenium.webdriver.support.ui import WebDriverWait
  • Часть исходного кода выглядит следующим образом:
Язык кода:python
кодКоличество запусков:0
копировать
lass WebDriverWait(object):
    def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
        """Constructor, takes a WebDriver instance and timeout in seconds.

           :Args:
            - driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)
            - timeout - Number of seconds before timing out
            - poll_frequency - sleep interval between calls
              By default, it is 0.5 second.
            - ignored_exceptions - iterable structure of exception classes ignored during calls.
              By default, it contains NoSuchElementException only.

           Example:
            from selenium.webdriver.support.ui import WebDriverWait \n
  • параметриллюстрировать:

параметр

иллюстрировать

driver

приводной объект

timeout

Установите таймаут обновления страницы

poll_frequency

Частота обновления страницы。по умолчанию0.5s

ignored_exceptions

Указывает, что исключения игнорируются,Выдает, если элемент не может быть найденNoSuchElementExceptionаномальный

  • WebDriverWaitМодуль имеет два методаuntilиuntil_not
Язык кода:python
кодКоличество запусков:0
копировать
    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is not False."""
        screen = None
        stacktrace = None

        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.time() > end_time:
                break
        raise TimeoutException(message, screen, stacktrace)
Язык кода:python
кодКоличество запусков:0
копировать
    def until_not(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is False."""
        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if not value:
                    return value
            except self._ignored_exceptions:
                return True
            time.sleep(self._poll)
            if time.time() > end_time:
                break
        raise TimeoutException(message)

в: 1. Метод. Существует два типа входящих объектов: один — анонимная функция, другой — заданный объект условия ожидаемые_условия. 2. Сообщение: при возникновении исключения отправьте информацию об исключении в сообщение; 3. Метод «ожидаемые_условия» представлен в файле selenium.webdriver.support импорта ожидаемых_условий.

  • Значение: установите определенную частоту для одного элемента, чтобы обновить текущую страницу в соответствии с частотой и определить, существует ли этот элемент.

WebDriverWaitНесколько часто используемых методов заключаются в следующем::

2.3.1 Определите, добавлен ли элемент в дерево DOM и является ли он невидимым

  • Определить, был ли добавлен элементDOMсреди деревьев,Это не означает, что элемент виден,Если он найден, верните элемент;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele = WebDriverWait(driver,10).until(expected_conditions.\
presence_of_element_located(By.ID, "xxx"))

2.3.2 Определите, добавлен ли элемент в DOM и видим ли он

  • Определить, был ли добавлен элементприезжатьDOMсередина,и видимый,Репрезентативные элементы могут отображаться,И ширина, и высота больше 0;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele1 = WebDriverWait(driver,10).until(expected_conditions.visibility_of_elemen\
t_located((by=By.ID,value='yyy')))

2.3.3 Определите, виден ли элемент

  • Определить, является ли элемент видимым, и вернуть элемент, если он виден;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele2 = WebDriverWait(driver,10).until(expected_conditions.visibility_of(driver\
.find_element(by=By.ID,value='zzz')))

2.3.4 Определите, существует ли хотя бы один элемент в дереве DOM

  • Определите, существует ли хотя бы1элементы хранятсясуществоватьDOMсреди деревьев,Если найден, верните список:
Язык кода:python
кодКоличество запусков:0
копировать
get_ele3 = WebDriverWait(driver,10).until(expected_conditions.presence_of_all_elem\
ents_located(By.CSS_SELECTOR,'.boss')))

2.3.5 Определить, содержит ли значение атрибута указанного элемента ожидаемую строку

  • Определить, содержит ли значение атрибута указанного элемента ожидаемую строку, и вернуть логическое значение;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele4 = WebDriverWait(driver,10).until(expected_conditions.text_to_be_present_i\
n_element_value(By.CSS_SELECTOR,'#su'))

2.3.6 Определить, содержит ли указанный элемент ожидаемую строку

  • Определите, содержит ли указанный элемент ожидаемую строку, и верните логическое значение;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele5= WebDriverWait(driver,10).until(expected_conditions.text_to_be_present_i\
n_element(By.XPATH,"//#[@id='ul']", ты'добавь'))

2.3.7 Определите, существует ли элемент в DOM или он невидим

  • Определить, существует ли элементсуществоватьDOMсерединаили невидимый,если видно,возвращатьсяFalse,В противном случае верните этот элемент;
Язык кода:python
кодКоличество запусков:0
копировать
get_ele6= WebDriverWait(driver,10).until(expected_conditions.invisibility_of_elem\
ent_located(By.CSS_SELECTOR,'#su'))

2.3.8 Определить, виден ли элемент и включен ли его статус

  • Определить, виден ли элемент И статус такойenable(Представляет собой кликабельный);
Язык кода:python
кодКоличество запусков:0
копировать
get_ele7= WebDriverWait(driver,10).until(expected_conditions.element_to_be_clicka\
ble(By.CSS_SELECTOR,'#su')).click()

ЯсуществоватьучаствоватьНа третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будет проводиться конкурс сочинений. Соберите команду, чтобы выиграть приз!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose