Odśwież stronę za pomocą Selenium Sterownik internetowy
⚡ Inteligentne podsumowanie
Odświeżanie strony w Selenium WebDriver ponownie ładuje bieżący URL tak aby każdy element renderował się przed wykonaniem asercji, a struktura oferuje pięć różnych poleceń, które realizują to samo przeładowanie na różne sposoby.
Podczas automatyzacji testów aplikacji internetowej zachodzi potrzeba wielokrotnego odświeżania strony, aby wszystkie elementy internetowe zostały w pełni załadowane. Podczas pierwszego ładowania strony niektóre elementy mogą zostać załadowane, a ich pojawienie się wymaga drugiego odświeżenia strony. Można to zrobić za pomocą polecenia refresh udostępnionego przez Selenium Sterownik sieciowy.
Jak odświeżyć stronę w Selenium
Operację odświeżania przeglądarki można wykonać za pomocą następujących metod: Selenium. Poniżej omówimy szczegółowo poniższe sposoby w całym artykule.
- polecenie driver.navigate().refresh()
- Pobierz metodę
- Wyślij polecenie Klucze
- Metoda nawigacji
- polecenie driver.navigate().to()
1) polecenie driver.navigate().refresh()
Jest to wbudowana metoda wykonywania operacji odświeżania strony udostępniana przez Selenium WebDriver. To polecenie jest najczęściej używanym poleceniem w automatyzacji testów do odświeżania strony. Polecenie odświeżania można użyć w prosty sposób, jak opisano poniżej.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Nawigacja to interfejs służący do wykonywania różnych operacji przeglądarki, takich jak przechodzenie do poprzedniej strony, przechodzenie do następnej strony, odświeżanie strony i zamykanie przeglądarki. Dostęp do metod interfejsu nawigacji można uzyskać za pomocą polecenia driver.navigate(). Metoda refresh interfejsu nawigacji nie przyjmuje żadnych argumentów i nie zwraca żadnej wartości.
Przykład:
Scenariusz testowy:
- Otwórz przeglądarkę Chrome ze stroną internetową https://demo.guru99.com/selenium/guru99home/
- Po pomyślnym załadowaniu strony odśwież stronę internetową za pomocą metody driver.navigate().refresh()
- Zamknij przeglądarkę za pomocą metody 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(); } }
⚠️ Uwaga dotycząca wersji: Selenium Menedżer wysłany z Selenium 4.6 i automatycznie pobiera pasujący sterownik przeglądarki, więc powyższy wiersz System.setProperty nie jest już wymagany w obecnej wersji — new ChromeDriver() wystarczy. Oryginalna linia jest zachowana, ponieważ nadal jest poprawna dla Selenium 3 styl konfiguracji, na podstawie którego napisano przykład.
Code Wyjście:
Na stronie początkowej załaduje się strona demonstracyjna strony głównej, taka jak pokazano poniżej.
Po odświeżeniu strony wyświetlany na niej film uległ zmianie, co potwierdza, że przeładowanie rzeczywiście nastąpiło.
Wiele innych sposobów odświeżania strony
Metoda odświeżania nie jest jedyną drogą do ponownego załadowania. Cztery poniższe techniki dają ten sam rezultat i warto je znać, ponieważ zablokowana aplikacja lub uparta przeglądarka czasami blokują jedną z nich.
2) Metoda Get
Metodę get można wykorzystać rekurencyjnie do odświeżenia strony. Aby to osiągnąć, musimy przekazać inną metodę jako argument do metody get.
Przykład:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) Metoda nawigacji
Ta metoda wykorzystuje tę samą koncepcję rekurencji, co wspomniana powyżej. Metoda getCurrentUrl() jest przekazywana jako argument do metody driver.navigate().to().
Przykład:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) Metoda wysyłania kluczy za pomocą klawisza F5
Jest to druga najczęściej stosowana metoda odświeżania strony Selenium. Przyjmuje klawisz odświeżania (F5) jako argument metody sendKeys. Ponieważ sendKeys działa tylko na elementach webowych, a nie w przeglądarce, musimy najpierw zidentyfikować prawidłowy element webowy na stronie internetowej, a następnie użyć metody sendKeys. Można to zrobić w sposób pokazany poniżej.
Przykład:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
Ponieważ naciśnięcie klawisza jest przekazywane do elementu, a nie do przeglądarki, ta trasa zależy od elementu, na którym znajduje się fokus. Jeśli lokalizator pasuje do pola, które nie może uzyskać fokusu, klucz zostaje połknięty, a strona nigdy nie zostanie przeładowana.
5) Metoda wysyłania kluczy za pomocą ASCII Code
Ta metoda wykorzystuje tę samą koncepcję co powyżej, ale zamiast podawać klawisz F5 jako argument, podajemy punkt kodowy klawisza odświeżania jako argument. Można to osiągnąć w sposób pokazany poniżej.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
Wartość \uE035 to punkt kodowy Unicode WebDriver, który protokół mapuje na F5, więc ten fragment kodu i poprzedni są równoważne.
Jak odświeżyć stronę za pomocą JavaWykonawca skryptu
Każda przeglądarka udostępnia funkcję ponownego ładowania skryptów stron i Selenium można to nazwać przez JavascriptInterfejs wykonawcy. Jest to typowy mechanizm awaryjny, gdy polecenie odświeżenia WebDriver zostanie przechwycone przez aplikację lub rozszerzenie przeglądarki.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
Warto zapamiętać dwie wersje:
- location.reload() wykonuje normalne przeładowanie i może wyświetlić stronę z pamięci podręcznej.
- historia.idź(0) jest starszym odpowiednikiem, z którego nadal korzystają niektóre starsze pakiety.
Trasa executora przebiega wewnątrz strony, więc nie czeka na nowy dokument samodzielnie. Po niej należy wykonać jawne polecenie wait, dokładnie tak samo, jak po driver.navigate().refresh(), i pamiętać, że przeładowanie sterowane skryptem nie wyczyści okna dialogowego na poziomie przeglądarki. Jeśli testowana aplikacja ładuje swoją zawartość asynchronicznie, należy zachować taką samą ostrożność, jak w przypadku… obsługa wywołań AJAX w Selenium Sterownik sieciowy.
Jak uniknąć wyjątku StaleElementReferenceException po odświeżeniu
Odświeżenie niszczy bieżący DOM i tworzy nowy. Każdy WebElement przechwycony przed przeładowaniem wskazuje teraz na węzeł, który już nie istnieje, więc kolejne wywołanie go zgłasza wyjątek StaleElementReferenceException. Jest to najczęstszy błąd występujący po odświeżeniu strony.
Istnieją trzy nawyki, które pozwalają uniknąć niemal wszystkich tych niepowodzeń:
- Zlokalizuj po, nigdy przedtem. Zapisz lokalizator By zamiast WebElement i wywołaj findElement ponownie po zakończeniu przeładowywania.
- Poczekaj na prawdziwy sygnał. Jawne oczekiwanie na widoczność elementu, który istnieje dopiero po przeładowaniu, jest o wiele bardziej niezawodne niż stałe uśpienie.
- Odśwież i przeczytaj ponownie. Nigdy nie przenoś wartości tekstowej lub atrybutu przechwyconego przed ponownym załadowaniem do potwierdzenia wykonanego po nim.
Poniższy wzór dotyczy wszystkich trzech:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait trwa przez czas Selenium 4, co stanowi zmianę w stosunku do konstruktora sekund całkowitych używanego w Selenium 3. Szersze techniki postępowania w przypadku tych awarii omówiono w naszym przewodniku obsługa wyjątków w Selenium.
Porównanie Selenium Metody odświeżania strony
Wszystkie sześć poleceń przeładowuje stronę, ale różnią się pod względem tego, od czego zależą i w jaki sposób działają.
| Metoda wykonania | Zależy od | Przeładowuje przez | Kiedy to jest właściwy wybór |
|---|---|---|---|
| driver.navigate().refresh() | Nic dodatkowego | Polecenie ponownego załadowania przeglądarki | Prawie zawsze — domyślnie |
| driver.get(driver.getCurrentUrl()) | Czytelny prąd URL | Nowa nawigacja | Jeśli chcesz również usunąć wpis historii |
| driver.navigate().to(driver.getCurrentUrl()) | Czytelny prąd URL | Nowa nawigacja | Tak samo jak powyżej, napisane przez interfejs nawigacyjny |
| sendKeys(Keys.F5) | Element, na którym można skupić uwagę | Naciśnięcie klawisza | Kiedy celowo testujesz ścieżkę klawiatury |
| wyślijKlucze(“\uE035”) | Element, na którym można skupić uwagę | Naciśnięcie klawisza | Identyczne z F5, zapisane jako punkt kodowy |
| JavascriptLokalizacja wykonawcy.reload() | Skrypty włączone | Skrypt strony | Gdy polecenie WebDriver jest zablokowane |
Zacznij od polecenia odświeżania i sięgaj po kolejny wiersz tylko wtedy, gdy z jakiegoś powodu nie uda się go wykonać. Ta sama kolejność preferencji obowiązuje, gdy… maksymalizuj lub zmień rozmiar okna przeglądarki:preferuj natywne wywołanie WebDriver i traktuj trasę skryptu jako wyjście awaryjne.


