Zapisy otwarte! Dołącz do kursu Selenium w Javie lub Selenium w C#. Tylko do 23.09.2021 do godz. 21:00. Zapisz się tutaj.

Selenium 32. Zadanie: interakcje z WebElementami

Czas przećwiczyć to, co przerobiliśmy wspólnie w kilku ostatnich filmach. Przed Tobą zadanie z interakcji z WebElementami.

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

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Wsparcie merytoryczne

Nie masz dostępu do wsparcia merytorycznego dla tego kursu. Wykup dostęp albo zaloguj się, by móc zadawać pytania.

  1. Czy selenium widzi tylko to co jest na ekranie?
    Pierwszy test zakończył się okej, a drugi nie. W drugim przypadku button faktycznie nie jest widoczny na ekranie. O co chodzi? Różnią się tylko wielkością okna.

    public class Login {
    WebDriver driver;
    
    @BeforeEach
    public void driverSetup(){
    System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
    driver = new ChromeDriver();
    //driver.manage().window().maximize();
    driver.manage().window().setSize(new Dimension(1200, 700));
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    driver.navigate().to(" https://fakestore.testelka.pl/moje-konto/");
    }
    
    @AfterEach
    public void quit(){
    driver.close();
    driver.quit();
    }
    
    @Test
    public void userLoginOk(){
    driver.findElement(By.cssSelector("input[id='username']")).sendKeys("magdalena.zagwojska");
    driver.findElement(By.cssSelector("#password")).sendKeys("Samolot123");
    driver.findElement(By.cssSelector("button[name='login']")).click();
    }
    }
    

    a ten nie przeszedł:

    public class Login {
    WebDriver driver;
    
    @BeforeEach
    public void driverSetup(){
    System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    //driver.manage().window().setSize(new Dimension(1200, 700));
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    driver.navigate().to(" https://fakestore.testelka.pl/moje-konto/");
    }
    
    @AfterEach
    public void quit(){
    driver.close();
    driver.quit();
    }
    
    @Test
    public void userLoginOk(){
    driver.findElement(By.cssSelector("input[id='username']")).sendKeys("magdalena.zagwojska");
    driver.findElement(By.cssSelector("#password")).sendKeys("Samolot123");
    driver.findElement(By.cssSelector("button[name='login']")).click();
    }
    }
    
    Odpowiedz
        • Aha, czyli jednak rozmiar okna ma znaczenie w tym przypadku : )
          Widziałam ten niebieski pasek i widziałam, że Selenium nie widzi buttona i zastanawiałam się czy to tak powinno działać. Jeśli jest to prawidłowe działanie no to super : )

          Odpowiedz
    • Dzięki dziewczyny za komentarze! U mnie pojawiał się ten błąd przy testowaniu rejestracji i długo nie mogłam dojść do tego co się dzieje. Po zwiększeniu okna przeglądarki test przeszedł 😉 i wiem, że automatyzacja rejestracji jednego użytkownika jest trochę bezsensu, ale to praktyka czyni mistrza, czy jakoś tak 😀

      Odpowiedz
  2. No tak, to faktycznie był skrót myślowy : ) obecnie mam przerwę od pracy i wypadłam z rytmu bycia dosłownym w 100% ; P

    Odpowiedz
  3. Cześć,

    Poradzisz proszę?
    Mam póki co mam następujący problem z poniższym kodem - assercja nie przechodzi, ponieważ pobierany wpisany adres email jest pusty. Powinnam użyć czegoś innego niż getText()? I tak, wiem, że assercja ta nie ma sensu za bardzo ale chciałam poćwiczyć pobieranie wartości 😉

    driver.findElement(By.id("reg_email")).sendKeys("anna.mar@gmail.com");
    driver.findElement(By.id("reg_password")).sendKeys("t&^$oo098est1p@ss");

    System.out.println("x " + driver.findElement(By.id("reg_email")).getText());
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    Assertions.assertEquals("anna.mar@gmail.com", driver.findElement(By.id("reg_email")).getText(), "email address is not correct");

    driver.findElement(By.cssSelector("button[name=\"register\"]")).click();

    Odpowiedz
  4. @Test
    public void should_correctly_log_in(){
    driver.findElement(By.xpath(".//input[@id=\"username\"]")).sendKeys(username);
    driver.findElement(By.xpath(".//input[@id=\"password\"]")).sendKeys(password);
    driver.findElement(By.xpath(".//button[@name=\"login\"]")).click();

    List username = driver.findElements(By.xpath(".//*[@class=\"woocommerce-MyAccount-content\"]//strong"));
    List username_string = new ArrayList();
    for(WebElement e : username){
    username_string.add(e.getText());
    }
    System.out.println(username_string);

    Assertions.assertEquals("lukaszpilch31", username_string.get(0), "First usage of Username is not the same as expected");
    Assertions.assertEquals("lukaszpilch31", username_string.get(1), "Second usage of Username is not the same as expected");
    }
    Napisałem taki happy path case do zalogowania się i jako że w dwóch miejscach po zalogowaniu się jest element z atrybutem strong w którym znajduje się username to zrobiłem dwie asercje na liście elementów. Test przechodzi, ale czy taki test case jest poprawnie napisany czy lepiej sprawdzać w sposób opisany w rozwiązaniu?

    Odpowiedz