Оновити сторінку за допомогою Selenium Веб-драйвер
⚡ Розумний підсумок
Оновлення сторінки в Selenium WebDriver перезавантажує поточний URL так що кожен елемент відображатиметься перед виконанням тверджень, а фреймворк пропонує п'ять різних команд, які досягають однакового перезавантаження різними способами.
Під час автоматизованого тестування веб-застосунку виникає потреба оновлювати сторінку кілька разів, щоб усі веб-елементи повністю завантажилися. Під час першого завантаження сторінки деякі веб-елементи можуть бути завантажені, тоді як для їх відображення потрібне друге оновлення сторінки. Це можна зробити за допомогою команди refresh, що надається командою Selenium WebDriver.
Як оновити сторінку в Selenium
Операцію оновлення браузера можна виконати наступними способами Selenium. Нижчезазначені способи ми детально обговоримо в цій статті.
- Команда driver.navigate().refresh()
- Отримати метод
- Команда Надіслати ключі
- Метод навігації
- Команда driver.navigate().to()
1) Команда driver.navigate().refresh()
Це вбудований метод для виконання операції оновлення сторінки, що надається Selenium WebDriver. Ця команда є найпоширенішою командою в автоматизації тестування для виконання операції оновлення сторінки. Команду оновлення можна використовувати простим способом, як зазначено нижче.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Навігація — це інтерфейс, який використовується для виконання різних операцій браузера, таких як перехід на попередню сторінку, перехід на наступну сторінку, оновлення сторінки та закриття браузера. До методів інтерфейсу навігації можна отримати доступ за допомогою команди driver.navigate(). Метод refresh інтерфейсу навігації не приймає жодних аргументів і не повертає жодного значення.
приклад:
Тестовий сценарій:
- Відкрийте браузер Chrome за допомогою веб-сторінки https://demo.guru99.com/selenium/guru99home/
- Після успішного завантаження сторінки оновіть її за допомогою методу driver.navigate().refresh().
- Закрийте браузер за допомогою методу driver.close()
Code
package Guru99Demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RefreshDemo { public static void main(String args[]) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/selenium/guru99home/"); driver.manage().window().maximize(); driver.navigate().refresh(); driver.close(); } }
⚠️ Примітка до версії: Selenium Менеджер постачається з Selenium 4.6 і автоматично завантажує відповідний драйвер браузера, тому рядок System.setProperty вище більше не потрібен у поточній версії — new ChromeDriver() достатньо. Початковий рядок зберігається, оскільки він все ще правильний для Selenium 3 стилі налаштування, відповідно до яких було написано приклад.
Code вихід:
На початковій сторінці завантаження демонстраційна головна сторінка відобразиться, як показано нижче.
Після оновлення сторінки відео на сторінці змінилося, що підтверджує, що перезавантаження дійсно відбулося.
Кілька інших способів оновлення сторінки
Метод оновлення — не єдиний спосіб перезавантаження. Чотири методи, наведені нижче, дають однаковий результат і їх варто знати, оскільки заблокована програма або браузер, що працює нестабільно, іноді блокують один із них.
2) Отримати метод
Метод get можна використовувати рекурсивно для оновлення сторінки. Для цього нам потрібно передати методу get інший метод як аргумент.
приклад:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Метод навігації
Цей метод використовує ту саму концепцію рекурсії, що й згадане вище. Метод getCurrentUrl() передається як аргумент методу driver.navigate().to().
приклад:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Метод надсилання ключів за допомогою клавіші F5
Це другий найпоширеніший спосіб оновлення сторінки SeleniumВін приймає клавішу оновлення (F5) як аргумент методу sendKeys. Оскільки sendKeys працює лише з веб-елементами, а не з браузером, ми повинні спочатку визначити дійсний веб-елемент на веб-сторінці, а потім використовувати метод sendKeys. Це можна зробити, як показано нижче.
приклад:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Оскільки натискання клавіші доставляється до елемента, а не до браузера chrome, цей маршрут залежить від елемента, на якому знаходиться фокус. Якщо локатор збігається з полем, яке не може отримати фокус, ключ проковтується, і сторінка ніколи не перезавантажується.
5) Метод надсилання ключів з використанням ASCII Code
Цей метод використовує ту саму концепцію, що й вище, але замість передачі клавіші F5 як аргументу ми надсилаємо кодову точку клавіші оновлення. Це можна зробити, як показано нижче.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Значення \uE035 — це кодова точка Unicode WebDriver, яку протокол відображає на F5, тому цей фрагмент коду та попередній еквівалентні.
Як оновити сторінку за допомогою JavaScriptExecutor
Кожен браузер надає функцію перезавантаження скриптам сторінки, і Selenium можна зателефонувати через JavascriptІнтерфейс виконавця. Це звичайний резервний варіант, коли команда оновлення WebDriver перехоплюється програмою або розширенням браузера.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Варто пам'ятати про два варіанти:
- розташування.перезавантаження() виконує звичайне перезавантаження та може обслуговувати сторінку з кешу.
- історія.go(0) – це старіший еквівалент, який досі використовується в деяких застарілих пакетах.
Маршрут виконавця виконується всередині сторінки, тому він не очікує нового документа самостійно. Після нього додайте явний оператор очікування, точно так само, як і після driver.navigate().refresh(), і пам’ятайте, що перезавантаження, кероване скриптом, не очистить діалогове вікно на рівні браузера. Якщо тестований застосунок завантажує свій вміст асинхронно, застосовується та сама обережність, що й під час обробка викликів AJAX у Selenium веб-драйвер.
Як уникнути винятку StaleElementReferenceException після оновлення
Оновлення знищує поточну DOM та створює нову. Кожен WebElement, захоплений перед перезавантаженням, тепер вказує на вузол, якого більше не існує, тому наступний виклик для нього викидає StaleElementReferenceException. Це найпоширеніша помилка, яка виникає після оновлення сторінки.
Три звички усувають майже всі ці невдачі:
- Знаходьте після, ніколи раніше. Збережіть локатор By, а не WebElement, та знову викличте findElement після завершення перезавантаження.
- Зачекайте на справжній сигнал. Явне очікування видимості елемента, який існує лише після перезавантаження, набагато надійніше, ніж фіксований режим сну.
- Оновіть, а потім перечитайте. Ніколи не переносьте текстове значення або атрибут, отриманий перед перезавантаженням, у твердження, зроблене після нього.
Наведена нижче схема застосовується до всіх трьох:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait приймає значення тривалості (Duration) у Selenium 4, що є зміною порівняно з конструктором цілочисельних секунд, який використовується в Selenium 3. Ширші методи усунення цих невдач описані в нашому посібнику обробка винятків у Selenium.
Порівняння Selenium Методи оновлення сторінки
Усі шість команд перезавантажують сторінку, але вони відрізняються тим, від чого залежать, і тим, як вони призводять до збою.
| Метод | Залежить від | Перезаряджується через | Коли це правильний вибір |
|---|---|---|---|
| драйвер.navigate().refresh() | Нічого зайвого | Команда перезавантаження браузера | Майже завжди — за замовчуванням |
| драйвер.get(драйвер.getCurrentUrl()) | Читабельний струм URL | Нова навігація | Якщо ви також хочете видалити запис історії |
| драйвер.navigate().to(driver.getCurrentUrl()) | Читабельний струм URL | Нова навігація | Те саме, що й вище, написано через інтерфейс навігації |
| sendKeys(Клавіші.F5) | Елемент, на якому можна фокусуватися | Натискання клавіші | Коли ви навмисно перевіряєте шлях клавіатури |
| sendKeys(“\uE035”) | Елемент, на якому можна фокусуватися | Натискання клавіші | Ідентично F5, записано як кодова точка |
| JavascriptРозташування виконавця.reload() | Скрипти ввімкнено | Сценарій сторінки | Коли команда WebDriver заблокована |
Почніть з команди оновлення та звертайтеся до іншого рядка лише тоді, коли вона не спрацьовує з причини, яку ви розумієте. Той самий порядок пріоритетів застосовується, коли ви розгорнути або змінити розмір вікна браузера: віддавати перевагу власному виклику WebDriver та розглядати маршрут скрипта як резервний варіант.


