[Тестирование программного обеспечения] Автоматизация общих функций
[Тестирование программного обеспечения] Автоматизация общих функций

Расположение элементов

web Основная операция автоматического тестирования — найти соответствующие элементы на странице, а затем выполнить с ними определенные операции. Существует много распространенных способов позиционирования элементов, например id,classname,tagname,xpath,cssSelector Часто используемые основные причины cssSelector и xpath

cssSelector

Функция селектора: выбирает указанный элемент метки на странице.

Типы селекторов делятся на базовые селекторы и составные селекторы. Общие методы позиционирования элементов можно позиционировать с помощью селекторов идентификаторов и подселекторов.

image.png
image.png

xpath

XML Язык путей может использоваться не только в XML Чтобы найти информацию в файле, вы также можете HTML Выберите узлы в .

xpath Используйте выражения пути для выбора xml Узлы в документе

В синтаксисе XPath:

  • получать HTML Все узлы на странице: //*
  • получать HTML страницаобозначениеизузел://[Указать узел]
    • //ul:получать HTML Все страницы ul узел
    • //input:получать HTML Все страницы input узел
  • получатьодинузелпрямой сынузел:/
    • //span/input
  • получатьодинузелотецузел:..
    • //input/..:получать input узелотецузел
  • выполнитьузелсопоставление атрибутов:[@...]
    • //[@id='kw]:соответствовать HTML на странице id Свойства kw изузел
  • Используйте указанный метод индекса для получения соответствующего содержимого узла.
    • Уведомление:xpath Индекс взят из 1 началось
    • Байду Домашняя страница пройдена://div/ul/li[3],Найдите третий горячий тег поиска Байду.

Более удобное поколение selector/xpath из⽅Режим:Щелкните правой кнопкой мыши и выберитекопировать"Copy selector/xpath"

Примечание. Страницы, открываемые автоматизацией, могут не совпадать при входе в систему или нет. При выполнении теста автоматизации необходимо обратить внимание на согласованность статуса страницы.

Найти элемент

  1. findElement,существоватьстраница Найти элемент, возвращаемое значение WebElement Найти элементы страницы
Язык кода:javascript
копировать
driver.findElement(By.cssSelector("#s-hotsearch-wrapper > div > a.hot-title > div > i:nth-child(1)")).click();  
driver.findElement((By.xpath("//*[@id=\"s-hotsearch-wrapper\"]/div/a[1]/div/i[1]"))).click();
  • Оба этих запроса находят Байду горячими запросами.

  1. findElements,существоватьстраница Найти элемент, возвращаемое значениедля List<WebElement>
Язык кода:javascript
копировать
List<WebElement> elements = driver.findElements(By.cssSelector("#hotsearch-content-wrapper > li > a > span.title-content-title"));  
for(WebElement str : elements){  
    System.out.println(str.getText());  
}
  • Распечатайте популярные поисковые заголовки
image.png
image.png

Манипулировать тестовыми объектами

Щелкните/отправьте объект — — click()

Язык кода:javascript
копировать
//Находим Байду и нажимаем
driver.finElement(By.cssSelector("#su")).click();

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

  • Скрытыми элементами на странице невозможно управлять, иначе будет сообщено об ошибке.
image.png
image.png

Имитировать ввод клавиш — sendKeys("")

Этот метод можно использовать для ввода текста где угодно.

Язык кода:javascript
копировать
driver.findElement(By.cssSelector("#kw")).sendKeys("Сегодняшняя погода");
Thread.sleep(3000);
драйвер.выйти();

![[Запись экрана 16.11.2024 165917.mp4]]

Очистить текстовое содержимое — —clear()

После ввода текста вы хотите изменить новое ключевое слово, поэтому вам нужно использовать его здесь. clear()

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

Язык кода:javascript
копировать
driver.findElement(By.cssSelector("#kw")).sendKeys("Я люблю игры");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("Я люблюизучать");

Получить текстовую информацию — getText()

Язык кода:javascript
копировать
WebElement bdtext =  driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(3) > a > span.title-content-title"));  
System.out.println(bdtext.getText());  

Вопрос: Можно ли пройти getText() Как получить текст «Нажмите Baidu» на кнопке «Нажмите кнопку Baidu»?

Язык кода:javascript
копировать
//получить Байду текст на кнопке  
String text = driver.findElement(By.cssSelector("#su")).getText();  
System.out.println("Текст над Байду: "+text);
  • Конечный результат:
image.png
image.png
  • напечатанный text пусто, потому что "Байду" input Значение атрибута в теге должно быть getAttribute(String) Вынь, его не вынесешь, взяв текст
image.png
image.png

Язык кода:javascript
копировать
//получить Байду текст на кнопке  
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");  
System.out.println("Текст над Байду: "+text);
image.png|360
image.png|360

Получить заголовок и URL-адрес страницы

Язык кода:javascript
копировать
String title = driver.getTitle();  
String url = driver.getCurrentUrl();  
System.out.println(title);  
System.out.println(url);
image.png|327
image.png|327

окно

Установить размер окна

Язык кода:javascript
копировать
//Установить размер окна  
//окноминимизировать  
driver.manage().window().minimize();  
Thread.sleep(2000);  
//окномаксимизировать  
driver.manage().window().maximize();  
Thread.sleep(2000);  
//окно на весь экран  
driver.manage().window().fullscreen();  
Thread.sleep(2000);  
//нестандартный размер  
driver.manage().window().setSize(new Dimension(800,400));  
Thread.sleep(2000);

Переключить окно

Когда драйвер будет создан, объект драйвера будет указывать на дескриптор открытой страницы.

  • Каждая вкладка имеет свою собственную информацию об дескрипторе.
  • Если вы хотите driver Чтобы указать на другие вкладки, необходимо изменить наведение
  1. получить информацию об дескрипторе для всех вкладок
  2. Если информация об дескрипторе вновь созданного окна отличается от информации об дескрипторе исходной страницы вкладки, выполните указанные изменения.
  3. тем самым достигая Переключить окноиз Эффект

  • получатьтекущийстраницаручка:driver.getWindowHandle()
  • получатьвсестраницаручка:driver.getWindowHandles()
Язык кода:javascript
копировать
driver.findElement(By.cssSelector("#s-hotsearch-wrapper > div > a.hot-title > div")).click();  
String curHandle = driver.getWindowHandle();  
Set<String> allHandles = driver.getWindowHandles();  
for(String handle : allHandles){  
    if(handle != curHandle){  
        //Выключатель driver Ручка указывает на  
        driver.switchTo().window(handle);  
    }  
}
  • в соответствии с driver получить дескрипторы всех страниц, но указывает только на одну

Примечание: выполнено driver.close() Раньше нужно было переключиться на незакрытое окно

  • автоматизация вообще не сохраняет существование и приходится открывать много вкладок,Перейти на любую вкладку
  • Может использоваться напрямую driver.get(URL) Сделать прыжок

Закрыть окно

Язык кода:javascript
копировать
//Закрываем текущую вкладку
driver.close();

//Закрываем браузер и освобождаем объект драйвера
driver.quit();
  • нравиться driver Наведите курсор на вкладку 1, то даже если вы закроете вкладку 1. Без изменений driver Вы не можете закрыть вкладку, указав 2. Если только driver из Указание на изменения

close() Он используется в относительно небольшом количестве сценариев и будет использоваться только в следующих сценариях:

  • После тестирования открывшейся новой вкладки продолжайте возвращаться к предыдущей вкладке для тестирования.

ждать

Если появляется надпись «Написание автоматизированного кода» NoSuchElement ошибка

  • Шаг 1. Добавьте перед кодом ошибки Thread.sleep(Второй),Настройка занимает больше времени
  • Шаг 2: Выполните автоматизацию,Откройте инструменты фронтенд-разработчика на открывшейся странице существующейавтоматизации.,Руководство Проверить элемент Это правда?изнет то же самое
    1. Страница, открытая автоматизацией, не содержит существующего элемента
      • Страница открытая вручную иавтоматизация другая (скорее всего страница разная при входе и не входе)
      • элементдля动态элемент(Решение:先定位动态элементиз Метка предыдущего уровня,Затем добавьте тег элемента для позиционирования)
    2. На странице, открытой автоматизацией, элемент существует.
      • Код выполняется быстрее, чем отображается страница. Страница еще не отрендерена,Программа уже начала его искать,Приводит к тому, что элемент не найден(Решение:добавить вждать)

Обязательное ожидание

Добейтесь эффекта ожидания, блокируя потоки

Язык кода:javascript
копировать
Thread.sleep(Второй);
  • преимущество:Простой метод письма,Легко понять,Заблокируйте программу напрямую
  • недостаток:большойиздобавленавтоматизацияиз Время выполнения

100 тестовые примеры, каждый тестовый пример добавляет обязательное среднее время ожидания 3 s

  • общий:1000 * 3 = 3000s = 50min
  • идеальныйизслучай:2 - 3min

скрытый Режимждать

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

Твоя девушка сменила школу и попросила тебя подождать ее три года. Но на следующий год она вернулась.

  • Вы настаиваете на том, чтобы подождать три года, прежде чемионасуществовать Вместе(Обязательное ожидание
  • после того, как она вернется,Ты простоионасуществовать Вместе Понятно(скрытый Режимждать
  • implicitlyWait() параметр:Duration Миллисекунды, секунды, минуты и другие методы, представленные в классе.
Язык кода:javascript
копировать
//Неявное ожидание 3 секунды
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));

//Неявное ожидание 3000 миллисекунд
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(3000));
  • существовать 3s Элемент найден внутри, продолжить выполнение
  • существовать 3s Элемент не найден, сообщается об ошибке NoSuchElement
  • Используйте опрос, чтобы найти этот элемент, и продолжайте спрашивать, найден ли он.
  • преимущество:разумныйждать,Глобальный эффект

скрытый РежимждатьОбластью действия являются все элементы всего скрипта.。То есть до тех пор, пока driver Объект не освобожден(driver.quit()),Неявное ожидание действует всегда.

показывать Режимждать

Явное ожидание также является умным ожиданием.,существоватьУкажите тайм-аутПокаСоблюдение условий эксплуатациипродолжит выполнять последующий код

Язык кода:javascript
копировать
new WebDriverWait(driver, Duration.ofSeconds(3).until($express))
  • $press:связанный с selenium.support.ui.ExpectedCondition Подписанный ExprxtedCondition добрый
  • возвращаемое значение:boolean
Язык кода:javascript
копировать
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(3));  
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#su")));  
//Сначала убедитесь, что элемент сохранен и на него можно щелкнуть  
driver.findElement(By.cssSelector("#su")).click();
  • преимущество:показывать Режимждатьдаразумныйждать,Условия явного ожидания можно настроить.,Гибкая работа
  • недостаток: сложный способ письма

ExpectedConditions Некоторые примеры предопределенных:

  • elementToBeClickable(By location):используется для Проверить элементиз期望да可见изи включен,чтобы вы могли нажать на него
  • textToBe(By locator, String str):Проверить элемент(точное совпадение)
  • presenceOfElementLocated(By locator):исследоватьстраницаиз DOM Имеется ли существующий элемент на
  • urlToBe(java.lang.String url):исследоватьтекущийстраницаиз URL это конкретный URL

Навигация в браузере

  • Открыть сайт
Язык кода:javascript
копировать
//Более длинный метод
driver.navigate().to("https://www.bytedance.com");

//простой метод
driver.get("https://www.bytedance.com");
  • Браузер вперед, назад, обновление
Язык кода:javascript
копировать
//Назад
driver.navigate().back();  
//вперед, продолжать
driver.navigate().forward();  
//обновить
driver.navigate().refresh();
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода