Оновити сторінку за допомогою Selenium Веб-драйвер

⚡ Розумний підсумок

Оновлення сторінки в Selenium WebDriver перезавантажує поточний URL так що кожен елемент відображатиметься перед виконанням тверджень, а фреймворк пропонує п'ять різних команд, які досягають однакового перезавантаження різними способами.

  • 🔘 Вибір за замовчуванням: driver.navigate().refresh() — це вбудована функція перезавантаження, яка не приймає аргументів і не повертає жодного значення.
  • ☑️ Рекурсивні варіанти: Передавання getCurrentUrl() у get() або navigate().to() перезавантажує ту саму адресу.
  • Маршрут клавіатури: sendKeys приймає Keys.F5 або значення Unicode \uE035, але він повинен бути спрямований на реальний елемент.
  • 🧪 Маршрут скрипта: JavascriptВиконавець, що виконує location.reload(), працює, коли команда WebDriver заблокована.
  • 🛠️ Після перезавантаження: Кожне посилання на елемент, отримане раніше, стає застарілим і його потрібно знаходити знову.
  • 📊 Сучасне облаштування: Selenium Manager з'явився у версії 4.6, тому шлях до драйвера більше не потрібно встановлювати вручну.

Оновіть сторінку за допомогою Selenium Команди WebDriver

Під час автоматизованого тестування веб-застосунку виникає потреба оновлювати сторінку кілька разів, щоб усі веб-елементи повністю завантажилися. Під час першого завантаження сторінки деякі веб-елементи можуть бути завантажені, тоді як для їх відображення потрібне друге оновлення сторінки. Це можна зробити за допомогою команди refresh, що надається командою Selenium WebDriver.

Як оновити сторінку в Selenium

Операцію оновлення браузера можна виконати наступними способами Selenium. Нижчезазначені способи ми детально обговоримо в цій статті.

  1. Команда driver.navigate().refresh()
  2. Отримати метод
  3. Команда Надіслати ключі
  4. Метод навігації
  5. Команда driver.navigate().to()

1) Команда driver.navigate().refresh()

Це вбудований метод для виконання операції оновлення сторінки, що надається Selenium WebDriver. Ця команда є найпоширенішою командою в автоматизації тестування для виконання операції оновлення сторінки. Команду оновлення можна використовувати простим способом, як зазначено нижче.

driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();

Навігація — це інтерфейс, який використовується для виконання різних операцій браузера, таких як перехід на попередню сторінку, перехід на наступну сторінку, оновлення сторінки та закриття браузера. До методів інтерфейсу навігації можна отримати доступ за допомогою команди driver.navigate(). Метод refresh інтерфейсу навігації не приймає жодних аргументів і не повертає жодного значення.

приклад:

Тестовий сценарій:

  1. Відкрийте браузер Chrome за допомогою веб-сторінки https://demo.guru99.com/selenium/guru99home/
  2. Після успішного завантаження сторінки оновіть її за допомогою методу driver.navigate().refresh().
  3. Закрийте браузер за допомогою методу 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 вихід:

На початковій сторінці завантаження демонстраційна головна сторінка відобразиться, як показано нижче.

Guru99 демонстраційна головна сторінка під час початкового завантаження перед виконанням команди оновлення

Після оновлення сторінки відео на сторінці змінилося, що підтверджує, що перезавантаження дійсно відбулося.

Guru99 демо-версія головної сторінки після того, як driver.navigate().refresh() показує інше відео

Кілька інших способів оновлення сторінки

Метод оновлення — не єдиний спосіб перезавантаження. Чотири методи, наведені нижче, дають однаковий результат і їх варто знати, оскільки заблокована програма або браузер, що працює нестабільно, іноді блокують один із них.

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();");

Варто пам'ятати про два варіанти:

  1. розташування.перезавантаження() виконує звичайне перезавантаження та може обслуговувати сторінку з кешу.
  2. історія.go(0) – це старіший еквівалент, який досі використовується в деяких застарілих пакетах.

Маршрут виконавця виконується всередині сторінки, тому він не очікує нового документа самостійно. Після нього додайте явний оператор очікування, точно так само, як і після driver.navigate().refresh(), і пам’ятайте, що перезавантаження, кероване скриптом, не очистить діалогове вікно на рівні браузера. Якщо тестований застосунок завантажує свій вміст асинхронно, застосовується та сама обережність, що й під час обробка викликів AJAX у Selenium веб-драйвер.

Як уникнути винятку StaleElementReferenceException після оновлення

Оновлення знищує поточну DOM та створює нову. Кожен WebElement, захоплений перед перезавантаженням, тепер вказує на вузол, якого більше не існує, тому наступний виклик для нього викидає StaleElementReferenceException. Це найпоширеніша помилка, яка виникає після оновлення сторінки.

Три звички усувають майже всі ці невдачі:

  1. Знаходьте після, ніколи раніше. Збережіть локатор By, а не WebElement, та знову викличте findElement після завершення перезавантаження.
  2. Зачекайте на справжній сигнал. Явне очікування видимості елемента, який існує лише після перезавантаження, набагато надійніше, ніж фіксований режим сну.
  3. Оновіть, а потім перечитайте. Ніколи не переносьте текстове значення або атрибут, отриманий перед перезавантаженням, у твердження, зроблене після нього.

Наведена нижче схема застосовується до всіх трьох:

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 та розглядати маршрут скрипта як резервний варіант.

Поширені запитання

Може. Якщо поточну сторінку було створено за допомогою POST-запиту, браузер може попросити повторно надіслати дані, і перезавантаження зависає після цього діалогового вікна. Перехід до URL знову ж таки, з get() повністю уникає запиту.

Назви прив'язок відрізняються, але команда та сама: driver.refresh() у Python, driver.Navigate().Refresh() у C# та driver.navigate().refresh() у JavaУсі три видають ідентичну інструкцію WebDriver.

Ні. Перезавантаження зберігає файли cookie, сховище сеансу та локальне сховище для того самого джерела, тому оновлення – це поганий спосіб скинути стан. Видаліть файли cookie явно або розпочніть новий сеанс браузера.

Самовідновлювальні механізми перерозподіляють локатор за кількома атрибутами, коли перезавантажений DOM більше не відповідає, а аналіз відмов моделює коливання часу перезавантаження кластерів, тому команда виправляє одне очікування, а не п'ятдесят тестів.

Так, і виклик оновлення в один рядок – це пропозиція, яку система постійно виконує правильно. Очікування, яке має слідувати за ним, – це те, де пропозиції йдуть не так, тому перевірте будь-який згенерований тайм-аут на відповідність тому, як програма фактично завантажується.

Немає окремої команди. Команди наближаються до неї, надсилаючи Ctrl та F5 разом через клас Actions або вимикаючи кеш через параметри браузера, що є більш надійним шляхом.

Не за допомогою команди оновлення, яка завжди перезавантажує верхній документ. Перейдіть у фрейм і перезавантажте його за допомогою скрипта або скиньте його атрибут джерела, а потім поверніться до вмісту за замовчуванням.

Не вгадайте з фіксованим часом сну. Використовуйте явне очікування від десяти до тридцяти секунд за умови, яка виконується лише після перезавантаження, щоб тест продовжився в момент готовності сторінки.

Підсумуйте цей пост за допомогою: