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.

  • 🔘 Wybór domyślny: driver.navigate().refresh() to wbudowana funkcja przeładowania, która nie przyjmuje żadnych argumentów i nie zwraca żadnej wartości.
  • ️ Warianty rekurencyjne: Przekazanie getCurrentUrl() do get() lub navigate().to() powoduje ponowne załadowanie tego samego adresu.
  • ✅ Trasa klawiatury: sendKeys akceptuje Keys.F5 lub wartość Unicode \uE035, ale musi ona wskazywać na rzeczywisty element.
  • 🧪 Trasa skryptu: JavascriptWykonawca wykonujący location.reload() działa, gdy polecenie WebDriver jest zablokowane.
  • 🛠️. Po przeładowaniu: Każde odniesienie do elementu przechwycone wcześniej staje się nieaktualne i trzeba je zlokalizować ponownie.
  • 📊 Nowoczesna konfiguracja: Selenium Menedżer pojawił się w wersji 4.6, więc ścieżki sterownika nie trzeba już ustawiać ręcznie.

Odśwież stronę za pomocą Selenium Polecenia WebDriver

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.

  1. polecenie driver.navigate().refresh()
  2. Pobierz metodę
  3. Wyślij polecenie Klucze
  4. Metoda nawigacji
  5. 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:

  1. Otwórz przeglądarkę Chrome ze stroną internetową https://demo.guru99.com/selenium/guru99home/
  2. Po pomyślnym załadowaniu strony odśwież stronę internetową za pomocą metody driver.navigate().refresh()
  3. 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.

GuruStrona główna demonstracyjna 99 podczas początkowego ładowania przed uruchomieniem polecenia odświeżania

Po odświeżeniu strony wyświetlany na niej film uległ zmianie, co potwierdza, że ​​przeładowanie rzeczywiście nastąpiło.

GuruStrona główna wersji demonstracyjnej 99 po driver.navigate().refresh() pokazująca inny film

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:

  1. location.reload() wykonuje normalne przeładowanie i może wyświetlić stronę z pamięci podręcznej.
  2. 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ń:

  1. Zlokalizuj po, nigdy przedtem. Zapisz lokalizator By zamiast WebElement i wywołaj findElement ponownie po zakończeniu przeładowywania.
  2. 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.
  3. 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.

FAQ

Może. Jeśli bieżąca strona została wygenerowana przez POST, przeglądarka może poprosić o ponowne przesłanie danych, a przeładowanie zostanie zatrzymane po tym oknie dialogowym. Przejście do URL ponownie za pomocą get() całkowicie pomija się monit.

Nazwy powiązań różnią się, ale polecenie jest takie samo: driver.refresh() w Python, driver.Navigate().Refresh() w C# i driver.navigate().refresh() w JavaWszystkie trzy generują identyczną instrukcję WebDriver.

Nie. Ponowne załadowanie zachowuje pliki cookie, pamięć sesji i pamięć lokalną dla tego samego źródła, dlatego odświeżanie nie jest dobrym sposobem na zresetowanie stanu. Zamiast tego usuń pliki cookie jawnie lub rozpocznij nową sesję przeglądarki.

Silniki samonaprawiające ponownie rozwiązują lokalizator na podstawie kilku atrybutów, gdy przeładowany DOM nie jest już zgodny, a modele analizy błędów grupują błędy związane z czasem przeładowania, dzięki czemu zespół naprawia jeden problem zamiast pięćdziesięciu testów.

Tak, a jednolinijkowe wywołanie odświeżania to sugestia, która zawsze działa poprawnie. Po tym oczekiwaniu pojawia się błąd, więc porównaj wygenerowany limit czasu z rzeczywistym ładowaniem aplikacji.

Nie ma dedykowanego polecenia. Zespoły przybliżają je, wysyłając jednocześnie Ctrl i F5 przez klasę Akcje lub wyłączając pamięć podręczną w opcjach przeglądarki, co jest bardziej niezawodną metodą.

Nie z poleceniem odświeżania, które zawsze przeładowuje dokument na górze. Przejdź do ramki i przeładuj ją za pomocą skryptu lub zresetuj jej atrybut źródłowy, a następnie wróć do domyślnej zawartości.

Nie zgaduj z ustalonym czasem uśpienia. Użyj wyraźnego oczekiwania od dziesięciu do trzydziestu sekund na warunek, który jest spełniony dopiero po przeładowaniu, aby test był kontynuowany w momencie, gdy strona będzie gotowa.

Podsumuj ten post następująco: