Опреснете страницата с помощта на 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

По време на автоматизирано тестване на уеб-базирано приложение, възниква необходимост страницата да се обновява многократно, за да се заредят всички уеб елементи напълно. При първоначалното зареждане на страницата някои уеб елементи може да са заредени, но е необходимо второ обновяване на страницата, за да се появят всички те. Това може да се направи с помощта на командата за обновяване, предоставена от 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 е кодовата точка на WebDriver Unicode, която протоколът съпоставя с F5, така че този фрагмент и предишният са еквивалентни.

Как да обновите страница с помощта на JavaScriptExecutor

Всеки браузър предоставя функция за презареждане на скриптове на страници и Selenium може да го извика чрез JavascriptИнтерфейс на изпълнителя. Това е обичайният резервен вариант, когато командата за обновяване на WebDriver бъде прихваната от приложението или от разширение на браузъра.

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");

Струва си да се запомнят две вариации:

  1. местоположение.презареждане() извършва нормално презареждане и може да обслужва страницата от кеша.
  2. history.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, което е промяна спрямо конструктора integer-seconds, използван в Selenium 3. По-широки техники за тези повреди са разгледани в нашето ръководство за обработка на изключения в Selenium.

Сравнение на Selenium Методи за обновяване на страницата

И шестте команди презареждат страницата, но се различават по това от какво зависят и как се провалят.

Начин на доставка Зависи от Презарежда се чрез Когато това е правилният избор
драйвер.навигация().опресняване() Нищо допълнително Командата за презареждане на браузъра Почти винаги — по подразбиране
драйвер.get(драйвер.getCurrentUrl()) Четлив ток URL Нова навигация Когато искате да премахнете и записа в историята
драйвер.navigate().to(драйвер.getCurrentUrl()) Четлив ток URL Нова навигация Същото като по-горе, написано през навигационния интерфейс
изпратиКлючове(Ключове.F5) Фокусируем елемент Натискане на клавиш Когато умишлено тествате пътя на клавиатурата
изпратиКлючове(“\uE035”) Фокусируем елемент Натискане на клавиш Идентично на F5, записано като кодова точка
JavascriptМестоположение на изпълнителя.reload() Скриптирането е активирано Скрипт на страница Когато командата WebDriver е блокирана

Започнете с командата за обновяване и посегнете към друг ред само когато тя се провали по причина, която разбирате. Същият ред на предпочитание важи и когато вие максимизиране или преоразмеряване на прозореца на браузъра: предпочита се нативното извикване на WebDriver и се третира маршрутът на скрипта като резервен вариант.

Въпроси и Отговори

Може. Ако текущата страница е създадена чрез POST, браузърът може да поиска повторно изпращане на данните и презареждането блокира зад този диалогов прозорец. Навигиране до URL отново с get() се избягва подканата изцяло.

Имената на свързванията се различават, но командата е една и съща: driver.refresh() в Python, driver.Navigate().Refresh() в C# и driver.navigate().refresh() в JavaИ трите издават една и съща инструкция WebDriver.

Не. Презареждането запазва „бисквитките“, хранилището за сесия и локалното хранилище за един и същ източник, поради което опресняването е лош начин за нулиране на състоянието. Изтрийте „бисквитките“ изрично или вместо това стартирайте нова сесия на браузъра.

Самовъзстановяващите се двигатели преразпознават локатор от няколко атрибута, когато презареденият DOM вече не съвпада, а моделите за анализ на грешки клъстерират отклонения във времето за презареждане, така че екипът поправя едно чакане, вместо петдесет теста.

Да, и едноредовото извикване за опресняване е предложение, което се получава постоянно. Чакането, което трябва да последва, е мястото, където предложенията се объркват, така че проверете всяко генерирано време за изчакване спрямо това как приложението действително се зарежда.

Няма специална команда. Екипите се приближават до такава, като изпращат Ctrl и F5 заедно чрез класа Actions или като деактивират кеша чрез опциите на браузъра, което е по-надеждният начин.

Не с командата за обновяване, която винаги презарежда горния документ. Превключете в рамката и я презаредете със скрипт или нулирайте атрибута ѝ source, след което се върнете към съдържанието по подразбиране.

Не правете предположения с фиксирано време за сън. Използвайте изрично изчакване от десет до тридесет секунди при условие, което е вярно само след презареждането, така че тестът да продължи в момента, в който страницата е готова.

Обобщете тази публикация с: