Czas na zadanie z zamykania sesji i przeglądarki. Będziesz mieć okazję poćwiczyć to, co przerobiliśmy wspólnie w kilku ostatnich filmach.
Na początku filmu tłumaczę polecenie, a następnie rozwiązanie. Będzie moment żeby zatrzymać film na czas wykonania zadania – dam znać w filmie kiedy.
Polecenie do zadania
Napisz test, który wykona następujące kroki:
- Otworzy stronę główną Wikipedii.
- Następnie otworzy stronę główną Nasa.
- Cofnie się do strony Wikipedii (używając nawigacji wstecz).
- Potwierdź, że driver jest na stronie Wikipedii: porównaj (Assertions.assertEquals()) tytuł strony z oczekiwanym.
- Przejdź do strony Nasa (używając nawigacji naprzód).
- Potwierdź, że driver jest na stronie Nasa: porównaj tytuł strony z oczekiwanym.
- Zamknij okno przeglądarki.
- Zamknij sesję.
Pamiętaj o inicjalizacji WebDrivera i podaniu ścieżki do ChromeDrivera.
Rozwiązanie
Lepiej nie podglądać przed rozwiązaniem zadania ⚠️
package Zadania; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Zadanie1 { WebDriver driver; @BeforeEach public void driverSetup() { System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe"); driver = new ChromeDriver(); driver.manage().window().setSize(new Dimension(1280, 720)); } @AfterEach public void closeAndQuit() { //7. Zamknij okno przeglądarki. driver.close(); //8. Zamknij sesję. driver.quit(); } @Test public void navigationTest() { //1. Otworzy stronę główną Wikipedii. driver.get("http://wikipedia.pl"); //2. Następnie otworzy stronę główną Nasa. driver.navigate().to("https://nasa.gov"); //3. Cofnie się do strony Wikipedii (używając nawigacji wstecz). driver.navigate().back(); //4. Potwierdź, że driver jest na stronie Wikipedii: porównaj (Assertions.assertEquals()) tytuł strony z oczekiwanym. String wikiTitle = "Wikipedia, wolna encyklopedia"; Assertions.assertEquals(wikiTitle, driver.getTitle(), "The title of the page is not: " + wikiTitle); //5. Przejdź do strony Nasa (używając nawigacji naprzód). driver.navigate().forward(); //6. Potwierdź, że driver jest na stronie Nasa: porównaj tytuł strony z oczekiwanym. String nasaTitle = "NASA"; Assertions.assertEquals(nasaTitle, driver.getTitle(), "The title of the page is not: " + nasaTitle); } }
Cześć, ogólnie zadanie udało mi się zrobić, jednak nie mogę dodać message przy asercji.
Piszę taką linijkę:
assertEquals(tittle2, driver.getTitle(), "Niepoprawna strona");
(oczywiście po drugim przecinku w kompilatorze widzę jeszcze "message")
Wtedy przy kompilacji dostaję error:
Error:(51, 9) java: cannot access java.util.function.Supplier
class file for java.util.function.Supplier not found
W momencie pisania:
assertEquals(tittle2, driver.getTitle());
wszystko działa
Co powinienem importować, żeby zadziałało? Niestety na lekcjach nie pokazujesz wszystkich linijek, przez co trudno jest mi znaleźć błąd.
Edit: pozwolę sobie odpowiedzieć, ponieważ doszedłem do sedna: problemem był rozjazd wersji Javy w ustawieniach InteliJ
Files > Settings > Build,Execution, Deployment > Compiiler > Java Compiler
Dzięki za informację (o tym, że się udało i g [...] Całość odpowiedzi widoczna dla kursantów.
Nie polecam mieszać .get i .navigate().back() chwilę mi zajęło rozkminienie czemu test nie przechodzi z taką konfiguracją, ale po ustawieniu timeouts już tak 😀
@Test
public void getMethod(){
driver.get("https://pl.wikipedia.org/wiki/Wikipedia:Strona_g%C5%82%C3%B3wna");
driver.get("https://www.nasa.gov/");
driver.navigate().back();
O, ciekawe, sprawdziłam jeszcze raz i u mnie nada [...] Całość odpowiedzi widoczna dla kursantów.
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); dodany do @BeforeEach pomógł. Zamiana driver.get() na driver.naviagate().to() też pomogło i to bez timeout.
Po prostu test nie przechodził aseracji:
Assertions.assertEquals("Wikipedia, wolna encyklopedia", driver.getTitle());
IntelliJ nie wykonywał do końca tej linijki driver.navigate().back(); a już przechodził do porównania, co w sumie jest dziwne, bo powinien zaczekać aż się strona wczyta
Powinien, ale może z jakiegoś powodu uznał, że [...] Całość odpowiedzi widoczna dla kursantów.
Chwilę się męczyłem bo chciałem porównać URL-a zamiast Title 😀 Mimo, ze były identyczne to błąd się wywalał i czytałem, że URL-e są dynamiczne zatem nie można do nich stosować assertEquals. Trzeba raczej użyć assertTrue ale w sumie można to zrobić tylko trzeba się pomęczyć trochę bardziej:
Hej
Szukałam odpowiedzi, ale nie mogę znaleźć i utknęłam. Potrzebuję pomocy.
Cały czas dostają taką oto odpowiedź:
java.lang.NullPointerException
at DriverMethods.newNavigation.getMethod(newNavigation.java:33)
Próbowałam różnych rzeczy, ale nie wiem jak to rozwiązać.
Będę wdzięczna za pomoc 🙂
Halko! Jak wpakowałam Twoje testy u siebie to mi [...] Całość odpowiedzi widoczna dla kursantów.
Cześć,
mam bardzo podobny problem, natomiast trochę inne objawy, gry próbuje zastosować metodykę BeforeEach i AfterEach test się nie wykonuje i wyrzuca błąd java.lang.NullPointerException
Natomiast gdy wykorzystam po prostu Before i After test zaliczony
mam takie same sterowniki jesli chodzi o junita i sellenium.
package Zadanie1;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class TestNavigate1 {
WebDriver driver;
@BeforeEach
public void driverSetup() {
System.setProperty("webdriver.chrome.driver", "src/main/resources/drivers/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@AfterEach
public void driverClose() {
driver.close();
driver.quit();
}
@Test
public void openWikipedia() {
driver.get("https://pl.wikipedia.org/");
driver.navigate().to("https://nasa.gov");
driver.navigate().back();
String wikiTitle = "Wikipedia, wolna encyklopedia";
Assertions.assertEquals(wikiTitle, driver.getTitle(), "The title of the page is not: " + wikiTitle);
driver.navigate().forward();
String nasaTitle = "NASA";
Assertions.assertEquals(nasaTitle, driver.getTitle(), "The title of the page is not: " + nasaTitle);
}
}
Halko! Problem podobny i jego przyczyna również. [...] Całość odpowiedzi widoczna dla kursantów.
Dziękuję ! Udało się 😀
Hej,
Miałam dokładnie ten sam problem. Zmiana importu na Twój pomogła 🙂
Jak zrobić porządek w pom'ie? Wydaje mi się, że mam tam teraz JUNIT dwa razy.
org.junit.jupiter
junit-jupiter-api
5.7.0
test
junit
junit
RELEASE
test
Halko! Akurat o czymś podobnym pisałam w newslet [...] Całość odpowiedzi widoczna dla kursantów.
dzięki, działa 🙂
Cześć,
wydaje mi się, że kod jest poprawnie napisany, ale dostaję błąd:
Kod:
Halko! Pokaż co masz w pliku pom.xml [...] Całość odpowiedzi widoczna dla kursantów.
Hej!
Też miałem błędy typu "exit code -1" oraz 0 czy -2 i okazało się, że trzeba było dopisać "https://" w stringach z linkami 🙂
Pół dnia się z tym męczyłem, zdążyłem zaktualizować IDE trzykrotnie i nic nie pomogło 😀
Hello,
Elu szybkie pytanie bo obecnie zmuszony jestem pracować na służbowym lapku 😉 i każde otwarcie chroma powoduje najpierw otwarcie SSO password login page :/ czy mogę to jakoś ominąć timeOut() albo jakimś wait() wtedy bym się logował i startuje wiki ? bo szukanie po webElement i logowanie za każdym razem to trochę za wcześnie.
Hej! Nie wiem w jakiej formie dostajesz to SSO ale [...] Całość odpowiedzi widoczna dla kursantów.
No niestety nie alerty :/ Ale ominąłem to inaczej. Używam stron w domenie .gov wtedy niewymagane jest logowanie tylko od razu odpala stronkę typu nasa.gov i na niej śmigam testy 🙂
Niemniej dziękuję za odpowiedź i podpowiedź. Miłego weekendu