En aquest tema, aprendrem com gestionar múltiples finestres del navegador i frames utilitzant Selenium WebDriver. Aquestes habilitats són essencials quan treballem amb aplicacions web que obren noves finestres o utilitzen frames per a la seva interfície d'usuari.

Conceptes Clau

  1. Finestres del Navegador:

    • Les aplicacions web poden obrir noves finestres o pestanyes del navegador.
    • Selenium WebDriver permet canviar entre aquestes finestres per interactuar amb elements dins d'elles.
  2. Frames:

    • Un frame és una secció d'una pàgina web que pot carregar un document HTML separat.
    • Els frames poden ser utilitzats per a mostrar contingut independent dins d'una pàgina web.

Gestió de Finestres del Navegador

Canviant entre Finestres

Quan una aplicació web obre una nova finestra, WebDriver pot canviar el focus a aquesta finestra utilitzant el seu identificador únic.

Exemple de Codi

// Obtenir l'identificador de la finestra actual
String mainWindowHandle = driver.getWindowHandle();

// Codi per obrir una nova finestra
// ...

// Obtenir tots els identificadors de finestres
Set<String> allWindowHandles = driver.getWindowHandles();

// Iterar sobre els identificadors de finestres
for (String windowHandle : allWindowHandles) {
    if (!windowHandle.equals(mainWindowHandle)) {
        // Canviar a la nova finestra
        driver.switchTo().window(windowHandle);
        break;
    }
}

// Realitzar accions a la nova finestra
// ...

// Tornar a la finestra principal
driver.switchTo().window(mainWindowHandle);

Tancant Finestres

Per tancar una finestra, simplement utilitza el mètode close() després de canviar a la finestra desitjada.

// Tancar la finestra actual
driver.close();

// Tornar a la finestra principal si cal
driver.switchTo().window(mainWindowHandle);

Gestió de Frames

Canviant entre Frames

Per interactuar amb elements dins d'un frame, primer has de canviar el context de WebDriver al frame desitjat.

Exemple de Codi

// Canviar al frame utilitzant el nom o l'índex
driver.switchTo().frame("frameName");
// o
driver.switchTo().frame(0);

// Realitzar accions dins del frame
// ...

// Tornar al context principal de la pàgina
driver.switchTo().defaultContent();

Canviant a un Frame per WebElement

També pots canviar a un frame utilitzant un objecte WebElement.

// Localitzar el frame com un WebElement
WebElement frameElement = driver.findElement(By.tagName("iframe"));

// Canviar al frame utilitzant el WebElement
driver.switchTo().frame(frameElement);

// Realitzar accions dins del frame
// ...

// Tornar al context principal de la pàgina
driver.switchTo().defaultContent();

Exercicis Pràctics

Exercici 1: Canvi de Finestres

  1. Obre una pàgina web que obri una nova finestra.
  2. Canvia a la nova finestra i verifica el títol de la pàgina.
  3. Tanca la nova finestra i torna a la finestra original.

Exercici 2: Interacció amb Frames

  1. Accedeix a una pàgina web que contingui un frame.
  2. Canvia al frame i interactua amb un element dins d'ell.
  3. Torna al context principal i verifica un element fora del frame.

Solucions

Solució a l'Exercici 1

// Obtenir l'identificador de la finestra principal
String mainWindowHandle = driver.getWindowHandle();

// Codi per obrir una nova finestra
// ...

// Obtenir tots els identificadors de finestres
Set<String> allWindowHandles = driver.getWindowHandles();

for (String windowHandle : allWindowHandles) {
    if (!windowHandle.equals(mainWindowHandle)) {
        driver.switchTo().window(windowHandle);
        System.out.println("Títol de la nova finestra: " + driver.getTitle());
        driver.close();
        break;
    }
}

// Tornar a la finestra principal
driver.switchTo().window(mainWindowHandle);

Solució a l'Exercici 2

// Canviar al frame utilitzant el nom
driver.switchTo().frame("frameName");

// Interactuar amb un element dins del frame
WebElement elementInFrame = driver.findElement(By.id("elementId"));
elementInFrame.click();

// Tornar al context principal
driver.switchTo().defaultContent();

// Verificar un element fora del frame
WebElement elementOutsideFrame = driver.findElement(By.id("outsideElementId"));
assertTrue(elementOutsideFrame.isDisplayed());

Conclusió

La gestió de finestres del navegador i frames és una part fonamental de l'automatització de proves amb Selenium. Amb la pràctica, seràs capaç de manejar escenaris complexos que involucren múltiples finestres i frames, millorant així la robustesa dels teus scripts de prova. En el següent tema, explorarem la sincronització en Selenium per assegurar que les nostres proves s'executin de manera fiable.

Automatització de Proves amb Selenium

Mòdul 1: Introducció a l'Automatització de Proves

Mòdul 2: Començant amb Selenium

Mòdul 3: Localització d'Elements Web

Mòdul 4: Interacció amb Elements Web

Mòdul 5: Sincronització en Selenium

Mòdul 6: Marc de Proves i Selenium

Mòdul 7: Conceptes Avançats de Selenium

Mòdul 8: Selenium Grid i Proves en Paral·lel

Mòdul 9: Integració Contínua i Selenium

Mòdul 10: Millors Pràctiques i Resolució de Problemes

© Copyright 2024. Tots els drets reservats