• Przejdź do głównej nawigacji
  • Przejdź do treści
  • Przejdź do głównego paska bocznego
  • Przejdź do stopki
Testelka.pl

Testelka.pl

Testelka.pl - o technologiach w testowaniu oprogramowania

  • Kursy
    • DARMOWY: Java dla testerów
    • Selenium w Javie
    • Selenium w C#
    • Testy API w REST Assured
    • Selektory CSS
    • XPath
  • Materiały na raz
  • Blog
  • O Eli
  • Zaloguj się
  • DOŁĄCZ

Selenium 49. Zadanie: praca na kilku oknach przeglądarki

Strona główna > Kursy > Kurs Selenium w Javie > Selenium 49. Zadanie: praca na kilku oknach przeglądarki

Czas przećwiczyć to, co przerobiliśmy wspólnie na ostatnim filmie, czyli pracę na kilku oknach przeglądarki. Przed Tobą zadanie, w którym konieczne będzie przełączenie się do nowego okna, żeby móc wykonać jakąś akcję.

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 aktywnej subskrypcji. Wykup subskrypcję albo zaloguj się, by móc zobaczyć pełną lekcję.

Rozwiązanie

Lepiej nie podglądać przed rozwiązaniem zadania ⚠️

Ukryta treść

Nie masz aktywnej subskrypcji. Wykup subskrypcję albo zaloguj się, by móc zobaczyć pełną lekcję.

Reader Interactions

Komentarze

Nie masz aktywnej subskrypcji. Wykup subskrypcję albo zaloguj się, by móc komentować.

Komentarze

  1. typowy napisał

    26 września, 2019 o 5:09 pm

    Czy takie rozwiązanie może być ?

    ublic class HomeworkWindowHandles {
        WebDriver driver;
        WebDriverWait wait;
        By shop = By.cssSelector("#menu-item-198");
        By allert = By.className("woocommerce-store-notice__dismiss-link");
        By windsufring = By.linkText("Windsurfing");
        By product = By.cssSelector("li.post-386");
    
        @BeforeEach
        public void setup(){
            System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
            wait = new WebDriverWait(driver, 7);
            driver.navigate().to("https://fakestore.testelka.pl");
            driver.findElement(allert).click();
            driver.findElement(shop).click();
            driver.findElement(windsufring).click();
            driver.findElement(product).click();
            wait.until(ExpectedConditions.invisibilityOfElementLocated(allert));
        }
    
        @AfterEach
        public void driverQuit(){
            driver.close();
            driver.quit();
        }
    
        @Test
        public void homeworkWindowHandlestTest(){
            driver.findElement(By.cssSelector("a[data-product-id*='386']")).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Przeglądaj listę życzeń")));
            driver.findElement(By.cssSelector("li#menu-item-248")).click();
            Set<String> windows = driver.getWindowHandles();
            String parentWindow = driver.getWindowHandle();
            windows.remove(parentWindow);
            String secondWindow = windows.iterator().next();
            driver.switchTo().window(secondWindow);
            driver.findElement(By.cssSelector("a[class*='remove remove_from_wishlist']")).click();
            //WebElement meesageElement = driver.findElement(By.cssSelector("div.woocommerce-message"));
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.woocommerce-message")));
            String message = driver.findElement(By.cssSelector("div.woocommerce-message")).getText();
            Assertions.assertEquals("Produkt został usunięty.", message, "Mesage was not exist");
        }
    Odpowiedz
    • Ela Sądel napisał

      27 września, 2019 o 10:03 am

      Halko! A czego dokładnie dotyczy Twoja wątpliwo [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  2. typowy napisał

    1 października, 2019 o 10:30 pm

    Ok dzięki ;]

    Odpowiedz
    • Ela Sądel napisał

      2 października, 2019 o 8:47 am

      Nie ma sprawy! Jeżeli nadal masz pytanie o jakiś [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  3. Anna Marczyńska napisał

    28 maja, 2020 o 11:41 pm

    Cześć,

    Czy mogłabyś proszę wytłumaczyć czemu poprzez poniższy kod otwierają mi się dwa okna z Listą życzeń? 🙂

        driver.findElement(By.cssSelector("a[class=\"woocommerce-store-notice__dismiss-link\"]")).click();
        driver.findElement(By.cssSelector("img[alt=\"Yoga w Japonii\"]")).click();
        driver.findElement(By.cssSelector("a[data-product-id=\"61\"]")).click();
        driver.findElement(By.cssSelector("li[id=\"menu-item-248\"]")).click();
        driver.findElement(By.cssSelector("a[rel=\"noopener noreferrer\"]")).click();
        Set windows = driver.getWindowHandles();
        String mainWindow = driver.getWindowHandle();
        windows.remove(mainWindow);
        String wishListPage = windows.iterator().next();
        driver.switchTo().window(wishListPage);
    
    Odpowiedz
    • Ela Sądel napisał

      29 maja, 2020 o 9:16 am

      Halko! Użyłam tego fragmentu kodu:

      
      		
      Odpowiedz
  4. Bartłomiej Ejdys napisał

    15 czerwca, 2020 o 7:30 pm

    Hej, z jakiegoś powodu po otwarciu wishlisty getWindowHandles na FF zwraca mi tylko 1 obiekt, za to na Chromie jest ok. Tylko ja tak mam?

    Odpowiedz
    • Ela Sądel napisał

      15 czerwca, 2020 o 9:03 pm

      Halko! Użyłam kodu, który podałam w tym zadani [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  5. Magdalena Zagwojska napisał

    6 lipca, 2020 o 1:22 am

    hej!
    mam jakiś taki kłopot, że nie działa mi dodawanie produktu do listy życzeń... nie do końca wiem czemu:

    import org.junit.jupiter.api.AfterEach;
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Dimension;
    import org.openqa.selenium.Point;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    public class WishList {
        WebDriver driver;
    
        @BeforeEach
        public void setup() {
            System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().setSize(new Dimension(1260, 760));
            driver.manage().window().setPosition(new Point(75, 20));
            driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
            driver.navigate().to("https://fakestore.testelka.pl/");
            driver.findElement(By.cssSelector(".woocommerce-store-notice__dismiss-link")).click();
        }
    
        @Test
        public void deletingFromWishListIsOk(){
            driver.findElement(By.cssSelector("[class*='first'] .woocommerce-loop-category__title")).click();
            driver.findElement(By.cssSelector("li:nth-child(1) [class=woocommerce-loop-product__title]")).click();
            driver.findElement(By.cssSelector("[class='yith-wcwl-add-button'] span")).click();
    

    Po tym mam komunikat, że dodano do listy życzeń, a jak kliknie na link 'Lista życzeń' na górze strony to jest tam pusto.
    PS. Jak się formatowało kod w komentarzach na javę?

    Odpowiedz
    • Ela Sądel napisał

      6 lipca, 2020 o 10:34 am

      Halko! Spróbuj teraz, zmieniłam ustawienia cache [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
  6. Egil napisał

    11 lipca, 2020 o 5:25 pm

    Hej! A gdybym chciał dodatkowo na koniec testu zamknąć okno z listą życzeń, wrócić do poprzednio otwartego okna i wykonać tam jakąś akcję (np. kliknąć w przycisk "Sklep") to jak powinienem napisać kod by prawidłowo przełączyć się do poprzedniego okna?

    Próbowałem między innymi w poniższy sposób, ale z marnym skutkiem.

    public class SwitchingTabs {
    
        WebDriver driver;
        WebDriverWait wait;
    
        By demoStoreNoticeDismiss = By.cssSelector("a[class*='dismiss-link']");
    
         @BeforeEach
            public void driverSetup() {
    
            System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().setSize(new Dimension(1295, 730));
            driver.manage().window().setPosition(new Point(10, 40));
            driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
            driver.navigate().to("https://fakestore.testelka.pl/product/wspinaczka-via-ferraty/");
            driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
            wait = new WebDriverWait(driver, 10);
            driver.findElement(demoStoreNoticeDismiss).click();
    
        }
    
        @AfterEach
        public void driverQuit() {
            driver.close();
            driver.quit();
    
        }
    
        @Test
        public void switchTabs() {
    
            WebElement addToWishListButton = driver.findElement(By.cssSelector("a.add_to_wishlist"));
            addToWishListButton.click();
            wait.until(ExpectedConditions.invisibilityOf(addToWishListButton)); // poczeka aż button zniknie by po kliknięciu w następny lista zawierała dodany produkt, bez tego produkt nie doda się do listy
            driver.findElement(By.cssSelector("li#menu-item-248>a")).click();
    
            Set windows = driver.getWindowHandles(); // znajdzie wszystkie otwarte okna
            String parentWindow = driver.getWindowHandle(); // aktywną kartę nazwie parentWindow
            windows.remove(parentWindow); // z setu otwartych okien usunie parentWindow,
            String secondWindow = windows.iterator().next(); // drugie okno
            driver.switchTo().window(secondWindow);
    
            driver.findElement(By.cssSelector("a.remove_from_wishlist")).click();
    
            By emptyWishlist = By.cssSelector("td.wishlist-empty");
            wait.until(ExpectedConditions.presenceOfElementLocated(emptyWishlist));
            Assertions.assertDoesNotThrow(()-> wait.until(ExpectedConditions.presenceOfElementLocated(emptyWishlist)), "Product was not removed from the wishlist.");
    
            driver.close();
    
            String parentWindowAfterClosing = driver.getWindowHandle();
            driver.switchTo().window(parentWindowAfterClosing);
    
            By shopButton = By.cssSelector("menu-item-198");
            driver.findElement(shopButton).click();
    }
    }
    
    

    Dzięki z góry 🙂

    Odpowiedz
    • Ela Sądel napisał

      11 lipca, 2020 o 7:10 pm

      Halko! Pierwsza moja rada to polecam czytać błę [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz
      • Egil napisał

        11 lipca, 2020 o 8:58 pm

        Zadziałało, dzięki! 🙂 A gdybym własnie najpierw chciał zamknąć kartę z listą życzeń to co zrobić by ta poprzednia karta została uznana jako aktywna?

        Odpowiedz
        • Ela Sądel napisał

          11 lipca, 2020 o 9:36 pm

          No tak, jak pokazałam. Jak już wspomniałam, to [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

          Odpowiedz
  7. Piotr Z. napisał

    2 października, 2020 o 5:14 pm

    Hej taka mała uwaga na koniec tego zadania. W 12 minucie pokazujesz jak "zepsuc" test tak aby Assercja nie przeszła. Wiec jak zauważyłem że jak jak nic nie grzebałem w samej asercji a tylko zmienilem selector na nieistniejacy i przestestowałem kod w 2 przypadkach. I tak w #1 przypadku kiedy zastosowałem wait przed Asercją to w momencie nie odnalezienia webelementu "td.wishlist-emptyy" w consoli pojawia sie TimeoutException i kod nie dochodzi nawet do Asercji i jej komunikatu. W #2 przypadku po usunieciu linijki z wait wszystko dziala jak trzeba czyli asercja sie wywala i wypisuje message.
    #1.
    ...
    driver.switchTo().window(wishListWindow);
    By removeFromWishList = By.cssSelector(".remove_from_wishlist");
    driver.findElement(removeFromWishList).click();
    By emptyWishList = By.cssSelector("td.wishlist-emptyy");
    wait.until(ExpectedConditions.presenceOfElementLocated(emptyWishList));
    Assertions.assertDoesNotThrow(()->wait.until(ExpectedConditions.presenceOfElementLocated(emptyWishList)),"Wishlist is not empty");
    }
    }

    #2
    ...
    driver.switchTo().window(wishListWindow);
    By removeFromWishList = By.cssSelector(".remove_from_wishlist");
    driver.findElement(removeFromWishList).click();
    By emptyWishList = By.cssSelector("td.wishlist-emptyy");
    Assertions.assertDoesNotThrow(()->wait.until(ExpectedConditions.presenceOfElementLocated(emptyWishList)),"Wishlist is not empty");
    }
    }

    Odpowiedz
    • Ela Sądel napisał

      2 października, 2020 o 5:47 pm

      Halko! Tak, masz rację, tego pierwszego waita prz [...] CAŁOŚĆ KOMENTARZA WIDOCZNA DLA SUBSKRYBENTÓW.

      Odpowiedz

Pierwszy Sidebar

LEKCJE W KURSIE

  • Przygotowanie środowiska programistycznego (DARMOWA LEKCJA)
  • Inicjalizacja drivera i demo Selenium (DARMOWA LEKCJA)
  • Nawigacja pomiędzy stronami (DARMOWA LEKCJA)
  • Zamykanie przeglądarki lub sesji (DARMOWA LEKCJA)
  • Zadanie: zamykanie przeglądarki i sesji (DARMOWA LEKCJA)
  • Tytuł strony, URL i jej źródło
  • Zadanie: pobieranie tytułu, URLa i źródła strony
  • Ciasteczka
  • Zadanie: ciasteczka
  • Rozmiar i pozycja okna przeglądarki
  • Zadanie: rozmiar i pozycja okna przeglądarki
  • Metody lokalizujące
  • Mechanizmy lokalizujące: nazwa klasy, id, atrybut name, nazwa taga
  • Mechanizmy lokalizujące: tekst linku
  • Zadanie: proste lokatory
  • Mechanizmy lokalizujące: wprowadzenie do selektorów CSS i XPath
  • Selektory CSS: tag, id, klasa
  • Selektory CSS: atrybuty i łączenie warunków
  • Zadanie: atrybuty i łączenie warunków w selektorach CSS
  • Selektory CSS: fragment wartości atrybutu
  • Zadanie: fragment wartości atrybutów w selektorach CSS
  • Selektory CSS: relacje między elementami
  • Zadanie: relacje w selektorach CSS
  • XPath: atrybuty i tagi
  • XPath: fragment atrybutu i tekst
  • Zadanie: atrybuty i tekst w XPath
  • XPath: relacje między elementami
  • Zadanie: relacje między elementami w XPath
  • Timeouty: oczekiwanie na pojawienie się elementu i załadowanie strony
  • Interakcje z WebElementami: klikanie w elementy i wprowadzanie tekstu
  • Interakcje z WebElementami: wgrywanie pliku z dysku
  • Zadanie: interakcje z WebElementami
  • Wstęp do zasad programowania: DRY
  • Wstęp do zasad programowania: KISS
  • Wstęp do zasad programowania: YAGNI
  • Zadanie: wstęp do zasad programowania
  • Czekanie na warunki: ExplicitWait
  • Czekanie na warunki: ExpectedConditions
  • Zadanie: czekanie na warunki
  • Metody na WebElementach: pobieranie informacji o elementach i findElement()
  • Zadanie: metody na WebElementach
  • Ramki
  • Zadanie: ramki
  • Wykonywanie JavaScriptów
  • Zadanie: wykonywanie JavaScriptów
  • Obsługa alertów
  • Zadanie: obsługa alertów
  • Praca na kilku oknach przeglądarki
  • Zadanie: praca na kilku oknach przeglądarki
  • Listy rozwijane
  • Zadanie: listy rozwijane
  • Gesty w Selenium: wstęp
  • Gesty w Selenium: klik, podwójny klik oraz prawy przycisk myszy
  • Gesty w Selenium: zdarzenia klawiatury i wysyłanie tekstu
  • Zadanie: gesty w Selenium
  • Gesty w Selenium: przesuwanie obiektów
  • Zadanie: przesuwanie obiektów
  • Web Storage: metody na Local Storage i Session Storage
  • Web Storage: użycie JavaScript
  • Zadanie: WebStorage
  • Zrzuty ekranu: wykonywanie screenshotów strony i elementów
  • Zrzuty ekranu: przykład użycia screenshotów
  • Inicjalizacja driverów: Chrome, Firefox, Opera, Internet Explorer, Edge
  • Konfiguracja Selenium Grid
  • RemoteWebDriver: inicjalizacja drivera wspierającego testy w trybie rozproszonym
  • Projekt testowy
  • Omówienie projektu testowego: testy koszyka
  • Omówienie projektu testowego: testy płatności
  • Omówienie projektu testowego: testy metod płatności
  • Page Object Model: wprowadzenie
  • Page Object Model: jak zacząć budować własny framework testowy
  • Page Object Model: kolejna klasa Page Object
  • Zadanie z POM: przepisanie testu addOneProductTenTimesTest()
  • Page Object Model: refaktoryzacja kodu i klasa BaseTest
  • Page Object Model: refaktoryzacja kodu i klasa BasePage
  • Page Object Model: refaktoryzacja i nowa metoda w klasie CartPage
  • Page Object Model: części wspólne różnych stron na przykładzie HeaderPage
  • Zadanie z POM: części wspólne stron (stopka w POM)
  • Zadanie z POM: przepisanie pozostałych testów koszyka
  • Zadanie z POM: przepisanie testu płatności bez zakładania konta cz. 1
  • Zadanie z POM: przepisanie testu płatności bez zakładania konta cz. 2 - wprowadzanie danych karty
  • Page Object Model: DriverFactory
  • Plik konfiguracyjny
  • Wzorzec Singleton na przykładzie konfiguracji
  • Synchronizacja w Singletonie i konfiguracja bez Singletona
  • Dane testowe z pliku
  • PageFactory: inicjalizacja elementów i FindBy
  • Wady i zalety PageFactory oraz pozostałe możliwości

Footer

Elzbieta Natalia Sadel
Calle Marzo 9 1 D
41009 Sevilla
Hiszpania
NIF: Y7882076J

Zostań trenerem!

Regulamin
Polityka prywatności
Polityka wsparcia w ramach członkostwa

Koszulki i torby dla testerów

Pomoc
Kontakt

Poskładane z 💛 przez Automatela.pl

Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.ZgodaNie wyrażam zgodyPolityka prywatności