web
Основная операция автоматического тестирования — найти соответствующие элементы на странице, а затем выполнить с ними определенные операции. Существует много распространенных способов позиционирования элементов, например id
,classname
,tagname
,xpath
,cssSelector
Часто используемые основные причины cssSelector
и xpath
Функция селектора: выбирает указанный элемент метки на странице.
Типы селекторов делятся на базовые селекторы и составные селекторы. Общие методы позиционирования элементов можно позиционировать с помощью селекторов идентификаторов и подселекторов.
XML
Язык путей может использоваться не только в XML
Чтобы найти информацию в файле, вы также можете HTML
Выберите узлы в .
xpath
Используйте выражения пути для выбора xml
Узлы в документе
В синтаксисе XPath:
//*
//[Указать узел]
//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
"
Примечание. Страницы, открываемые автоматизацией, могут не совпадать при входе в систему или нет. При выполнении теста автоматизации необходимо обратить внимание на согласованность статуса страницы.
findElement
,существоватьстраница Найти элемент, возвращаемое значение WebElement
Найти элементы страницы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();
findElements
,существоватьстраница Найти элемент, возвращаемое значениедля List<WebElement>
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());
}
//Находим Байду и нажимаем
driver.finElement(By.cssSelector("#su")).click();
Помимо кнопок, на которые можно нажимать, можно также нажимать и большинство других элементов на странице.
Этот метод можно использовать для ввода текста где угодно.
driver.findElement(By.cssSelector("#kw")).sendKeys("Сегодняшняя погода");
Thread.sleep(3000);
драйвер.выйти();
![[Запись экрана 16.11.2024 165917.mp4]]
После ввода текста вы хотите изменить новое ключевое слово, поэтому вам нужно использовать его здесь. clear()
Если вы хотите изменить несколько ключевых слов в одной сцене, вам необходимо каждый раз очищать предыдущее ключевое слово, если оно не очищено; sendKeys
Операция сращивания будет завершена.
driver.findElement(By.cssSelector("#kw")).sendKeys("Я люблю игры");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("Я люблюизучать");
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»?
//получить Байду текст на кнопке
String text = driver.findElement(By.cssSelector("#su")).getText();
System.out.println("Текст над Байду: "+text);
//получить Байду текст на кнопке
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
System.out.println("Текст над Байду: "+text);
String title = driver.getTitle();
String url = driver.getCurrentUrl();
System.out.println(title);
System.out.println(url);
//Установить размер окна
//окноминимизировать
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
Чтобы указать на другие вкладки, необходимо изменить наведениеdriver.getWindowHandle()
driver.getWindowHandles()
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)
Сделать прыжок//Закрываем текущую вкладку
driver.close();
//Закрываем браузер и освобождаем объект драйвера
driver.quit();
close()
Он используется в относительно небольшом количестве сценариев и будет использоваться только в следующих сценариях:
Если появляется надпись «Написание автоматизированного кода» NoSuchElement
ошибка
Thread.sleep(Второй)
,Настройка занимает больше времениДобейтесь эффекта ожидания, блокируя потоки
Thread.sleep(Второй);
100 тестовые примеры, каждый тестовый пример добавляет обязательное среднее время ожидания 3 s
1000 * 3 = 3000s = 50min
2 - 3min
скрытый Режимждатьэто своего родаразумныйждать,он может оговоритьсуществовать Найти элемент, существующий непрерывно. Найти в течение указанного времени. элемент. Если он найден, код продолжает выполняться, и будет сообщаться об ошибке до тех пор, пока не истечет время ожидания элемента и ни один элемент не будет найден.
Твоя девушка сменила школу и попросила тебя подождать ее три года. Но на следующий год она вернулась.
implicitlyWait()
параметр:Duration
Миллисекунды, секунды, минуты и другие методы, представленные в классе.//Неявное ожидание 3 секунды
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//Неявное ожидание 3000 миллисекунд
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(3000));
3s
Элемент найден внутри, продолжить выполнение3s
Элемент не найден, сообщается об ошибке NoSuchElement
скрытый РежимждатьОбластью действия являются все элементы всего скрипта.。То есть до тех пор, пока driver
Объект не освобожден(driver.quit()
),Неявное ожидание действует всегда.
Явное ожидание также является умным ожиданием.,существоватьУкажите тайм-аутПокаСоблюдение условий эксплуатациипродолжит выполнять последующий код
new WebDriverWait(driver, Duration.ofSeconds(3).until($express))
$press
:связанный с selenium.support.ui.ExpectedCondition
Подписанный ExprxtedCondition
добрыйboolean
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//Более длинный метод
driver.navigate().to("https://www.bytedance.com");
//простой метод
driver.get("https://www.bytedance.com");
//Назад
driver.navigate().back();
//вперед, продолжать
driver.navigate().forward();
//обновить
driver.navigate().refresh();