W tej lekcji pokażę Ci jak zainicjalizować drivera. Zobaczysz także krótkie demo Selenium.
Zmiana zachowania w DEMO
Poniższe demo, którego nie ma potrzeby przepisywać (jeszcze się nakodzisz przy kolejnych filmach i zadaniach, to jest tylko demo :)), nie zadziała przy obecnym zachowaniu strony Google. Teraz doszło okno informujące o ciasteczkach, które blokuje możliwość wykonania jakiejkolwiek akcji na stronie. Rozwiązanie, czyli zamknięcie tego okna, nie jest zadaniem prostym bo wymaga już umiejętności obsłużenia ramki. Ta lekcja pojawi się w module Wyższa Szkoła Jazdy.
Inicjalizacja drivera: linki i materiały
Żeby móc korzystać z Selenium w naszych testach i móc komunikować się z przeglądarką, potrzebny Ci będzie obiekt klasy implementującej interfejs WebDriver. Klasa implementująca będzie Ci potrzebna właśnie dlatego, że WebDriver jest interfejsem, co uniemożliwia inicjalizację obiektów wprost z WebDrivera.
Selenium dostarcza kilka klas implementujących ten interfejs przystosowanych do obsługi najpopularniejszych przeglądarek. W tym kursie będziemy korzystać z przeglądarki Chrome, a więc do inicjalizacji drivera użyjemy klasy ChromeDriver.
Oprócz obiektu klasy ChromeDriver potrzebujemy także pliku chromedriver.exe, który umożliwi komunikację z przeglądarką. Plik ten możesz możesz pobrać z tej strony.
Kod
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class FirstTest { @Test public void demoTest(){ System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().window().setSize(new Dimension(1295, 730)); driver.navigate().to("https://google.pl"); WebElement searchField = driver.findElement(By.cssSelector("[title='Szukaj']")); String searchEntry = "wszechświaty równoległe"; String title = "Wieloświat – Wikipedia, wolna encyklopedia"; searchField.sendKeys(searchEntry); searchField.submit(); driver.findElement(By.xpath(".//*[text()='"+ title +"']")).click(); WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.titleIs(title)); String entryURL = "https://pl.wikipedia.org/wiki/Wielo%C5%9Bwiat"; Assertions.assertEquals(entryURL, driver.getCurrentUrl(), "URL is not correct"); } }
Cześć w katalogu main masz takie coś jak 'resources' jak to stworzylas i jak dodajesz tam chromedrivera??
Jak wybieram new -resources to nie moge tam nic dodac. Wytłumacz to proszę.
Halko! Nie dodaję tego resources w ogóle - mam t [...] Całość odpowiedzi widoczna dla kursantów.
Cześć 🙂
Pomimo zastosowania się do kroków związanych z pobraniem chromedrivera po starcie testu pojawia się komunikat:
java.lang.IllegalStateException: The driver executable does not exist: C:\Users\avipo\IdeaProjects\start1\src\main\resources\chromedrive.exe
Jakaś podpowiedź dlaczego tak jest i co zrobić żeby test się odpalił 🙂 ?
( używam chroma: Wersja 80.0.3987.132 (Oficjalna wersja) (64-bitowa), ściągnęłam: ChromeDriver 80.0.3987.106 )
Halko! Zaczęłabym od sprawdzenia, czy pod tą ś [...] Całość odpowiedzi widoczna dla kursantów.
ooo nie kompletnie tego nie zauważyłam a wielokrotnie sprawdzałam czy mam dobrze 🙂 czasem się zdarza taki głupi błąd 🙂 Dziękuję . Teraz działa 🙂
Nie ma sprawy, mi się bardzo często zdarza i lit [...] Całość odpowiedzi widoczna dla kursantów.
Hej u mnie w dalszym ciągu pojawia się poniższy błąd. Dodałam set.property oraz ścieżkę ale ciągle jest to samo. Czy mogłabyś mi coś podpowiedzieć skąd ten błąd? Pozdrawiam
java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html.
A pokaż kod 🙂 [...] Całość odpowiedzi widoczna dla kursantów.
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class FirstTestSelenium {
@Test
public void demoTest() {
System.setProperty("WebDriver.chrome.driver","src/main/resources/chromedriver.exe");
WebDriver driver = new ChromeDriver();
Wielkość znaków ma znaczenie, powinno być webd [...] Całość odpowiedzi widoczna dla kursantów.
Ok, poprawiłam w jakimś stopniu zadziałało przeglądarka się otworzyła i od razu zamknęła.
Zacznij od porównania na spokojnie kodu. Jeżeli [...] Całość odpowiedzi widoczna dla kursantów.
Już jest wszystko dobrze. Miałam wyższą wersję chormedrivera niż przeglądarki. Dzięki za szybką pomoc.
Ja miałem błąd przy próbie odpalenia
"Error:java: release version 5 not supported"
Ale trzeba było dodać w POMie
Gdzie 11.0.6 oznacza wersję Javy i pomogło ; )
Halko! W poprzedniej lekcji pojawił się [...] Całość odpowiedzi widoczna dla kursantów.
Czy w testach pisanych z użyciem Selenium stosuje się komenatrze Given-When-Then lub AAA?
Halko! Komentarze w kodzie są tylko informacją d [...] Całość odpowiedzi widoczna dla kursantów.
Cześć, przy próbie odpalenia testu pojawia się poniższy błąd. Czy mogłabyś podpowiedzieć jak można rozwiązać ten problem? Pozdrawiam
Starting ChromeDriver 92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634}) on port 2927
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location C:\Program Files\Google\Chrome\Application\chrome.exe is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-O8OS0HB', ip: '192.168.0.122', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '13.0.2'
https://snipboard.io/6qNDEg.jpg
Halko! Mówiąc szczerze pierwszy raz to widzę. Z [...] Całość odpowiedzi widoczna dla kursantów.
Hej, okazuje się, że chyba mój antywirus blokował coś. Wyłączyłam ochronę przeglądarek + restart i zaczęło działać 🙂 Dzięki za szybką odpowiedź.
Super, ekstra, że do tego doszłaś! 😀 [...] Całość odpowiedzi widoczna dla kursantów.
Cześć,
mały protip do podawania ścieżki do pliku z driverem:
W IntelliJ można skopiować ścieżkę do pliku drivera, przez co minimalizuje się ryzyko zrobienia literówki w ścieżce. Wystarczy po lewej w strukturze projektu kliknąć prawym przyciskiem myszy na plik chromedriver.exe i wybrać "Copy Path/Reference..." i użyć "Patht From Content Root". Mamy w schowku ścieżkę, którą za pomocą Ctrl + V mozna wkleić do System.setProperty().
Dzięki! 😀 [...] Całość odpowiedzi widoczna dla kursantów.
Cześć, robię sobie po kolei nowy projekt ale pokopiowałem sobie zawartość pom'a i chromedrivera z innego projektu, który działa. Niestety teraz męczę się z błędem w konsoli jak tutaj na screenie: https://snipboard.io/8XUhA0.jpg a mój pom wygląda tak: https://snipboard.io/sbCrEc.jpg oraz https://snipboard.io/AFpowc.jpg. Struktura projektu oraz kod napisany na pierwszy test wygląda tak: https://snipboard.io/dTFDXI.jpg. Dzięki z góry za podpowiedź, pozdrawiam, Konrad z Katowic
Halko! A dlaczego nie skonfigurujesz tego tak jak [...] Całość odpowiedzi widoczna dla kursantów.
ELa Help
Mam takie coś org.openqa.selenium.ElementNotInteractableException: element not interactable
Nawet jak żywcem przekopiuję Twój kod. POM sprawdziłem 3 razy i powinien być OK
Halko! Zostaw i leć dalej, to jest tylko demo, ni [...] Całość odpowiedzi widoczna dla kursantów.
Dzięki to lecę dalej 😀