W tej lekcji pokażę Ci w jaki sposób nawigować się pomiędzy stronami w Selenium.
Nawigacja pomiędzy stronami to akcje takie jak na przykład przejście na daną stronę albo cofnięcie się na poprzednią. Na tej lekcji dowiesz się jak mówić do Selenium, żebyśmy mogli za jego pomocą wykonać następujące akcje:
- przejść na podaną stronę,
- odświeżyć stronę,
- przejść na poprzednią stronę z historii przeglądarki,
- przejść na następną stronę z historii przeglądarki.
Chcesz się bardziej wgryźć w metody nawigacyjne? Link do dokumentacji Selenium, odpowiadający tym zagadnieniom znajdziesz tutaj: WebDriver.Navigation.
Kod
package DriverMethods; import org.junit.jupiter.api.AfterEach; 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 NavigationAndClosing { 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 driverQuit(){ driver.close(); driver.quit(); } @Test public void getMethod(){ driver.get("http://google.pl"); } @Test public void navigate(){ driver.navigate().to("https://google.pl"); driver.navigate().to("https://www.amazon.com"); driver.navigate().back(); driver.navigate().forward(); driver.navigate().refresh(); driver.getCurrentUrl(); } }
Hej,
w pierwszych dwoch lekcjach
Przygotowanie środowiska programistycznego (DARMOWA LEKCJA)
Inicjalizacja drivera i demo Selenium (DARMOWA LEKCJA)
pracujesz na projekcie 'Start' w lokalizacji d:\dev\IntelliJ\start
Natomiast w lekcji trzeciej rozumiem ze pracujemy juz na innym projekcie 'SeleniumTrainingBasics' d:\dev\IntelliJ\SeleniumTrainingBasics
Pytanie czy ustawienia pierwszego i kolejnego projektu się różnią?'
Hej! Ustawienia się nie różnią, w POMie jest t [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Co do komentarza Piotra - też się chwilę musiałam nad tym zastanowić. Przydałaby się też możliwość ściągnięcia pliku danej klasy, żeby w razie czego sobie porównać/przekopiować jeśli coś nie działa 🙂
Wezmę to pod uwagę jak będę robić kolejną it [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Nie potrafię stworzyć tak, żeby było jak na filmie.
Na samej górze jest package a nie class i zabardzo nie umiem tego rozkminić, tak samo z nazwami projektów.
No i pytanko odnośnie:
Jak zaimportować Dimension
Również nie rozumiem zabardzo jak dojść do sytuacji java/DriverMethods/NavigattionAndClosing?
Proszę o wyjaśnienie
Halko! Żeby dojść do java/DriverMethods/Navigat [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Cześć,
poniższy test mi nie działa. Jak go naprawić?
Error:(13, 80) java: ';' expected
Error:(13, 61) java: ')' expected
Error:(13, 77) java: not a statement
Edit:
Działa. Wpisałem słowa "width" i "height" ręcznie. Wystarczyło wpisać liczbę. Podpowiedź (dymek), która pojawiła się na górze była dla mnie myląca.
Hej. Nie działa mi ten test niestety. Pojawia mi się poniższy błąd. Nie mogę sobie z nim poradzić. Poprawiałam kod już kilka razy ale ciągle jest to samo. Na samym końcu dorzuciłam jeszcze kod.
java.lang.NullPointerException
at FirstTestSelenium.getMetod(FirstTestSelenium.java:24)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:134)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:597)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)
at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:816)
at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
at org.testng.TestRunner.privateRun(TestRunner.java:766)
at org.testng.TestRunner.run(TestRunner.java:587)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
at org.testng.SuiteRunner.run(SuiteRunner.java:286)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1109)
at org.testng.TestNG.runSuites(TestNG.java:1039)
at org.testng.TestNG.run(TestNG.java:1007)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:110)
public class FirstTestSelenium {
WebDriver driver ;
@BeforeEach
public void driveSetup (){
System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().setSize(new Dimension(1295, 730));
}
@AfterEach
public void driveQuit (){
driver.quit();
}
@Test
public void getMetod (){
driver.get("https://google.com/");
}
@Test
public void navigate (){
}
}
Porównaj, proszę, kod z tym co jest pod filmem ( [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Faktycznie, miałam inny import, który odpowiada za odpalenie testu. Dzięki:)
Z tego co kojarzę jeszcze różnica pomiędzy navigate() i get() jest taka, że przy get() tracimy historię gdyż nie jest to przechodzenie między stronami "zwykłego użytkownika" zatem też cookiesów nie będzie zapisywać. No i chyba navigate() jest trochę szybszy chociaż w testach to drugorzędna kwestia 😀
Halko! Mówię co widzę w kodzie, a w kodzie widz [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.
Kiedyś tego szukałem bo mnie to zastanawiało i między innymi na stackoverflow się natknąłem na wpis:
https://stackoverflow.com/questions/33865618/difference-between-webdriver-get-and-webdriver-navigate-to-in-the-case-of-ur/33868976#33868976
Z tego co wyczytałem jeszcze tutaj https://www.seleniumeasy.com/selenium-tutorials/difference-between-webdriver-get-and-navigate
To get czeka na załadowanie strony no i nie ma opcji w nim na .forward .backward ale skoro nie wynika to z kodu bezpośrednio to w sumie ciężko powiedzieć skąd to. Może przez to, że navigate wywołuje u siebie get to nie sprawdza już czy request w nim się w pełni zakończył zatem nie czeka na pełne załadowanie strony? Ogólnie raczej będę stosować navigate().to() dla tych dodatkowych opcji na poziomie składni ale ciekawe to!
Chyba mówimy trochę o czymś innym. Ja mówię o [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.