En aquest tema, explorarem les esperes fluents en Selenium, una tècnica avançada per gestionar la sincronització entre el teu script de prova i l'aplicació web. Les esperes fluents són útils quan necessites més control sobre la freqüència i la durada de les esperes.
Què són les Esperes Fluents?
Les esperes fluents permeten definir:
- Durada màxima d'espera: El temps màxim que el WebDriver ha d'esperar abans de llançar una excepció.
- Freqüència de comprovació: La freqüència amb la qual el WebDriver comprovarà la condició.
- Ignorar excepcions: Les excepcions que es poden ignorar durant l'espera.
A diferència de les esperes implícites i explícites, les esperes fluents ofereixen més flexibilitat i control sobre el comportament de l'espera.
Com Configurar Esperes Fluents
Exemple de Codi
A continuació, es mostra un exemple de com configurar una espera fluida en Selenium utilitzant Java:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.FluentWait; import java.time.Duration; import java.util.NoSuchElementException; import java.util.function.Function; public class FluentWaitExample { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("http://example.com"); // Configuració de l'espera fluida FluentWait<WebDriver> wait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(30)) // Durada màxima d'espera .pollingEvery(Duration.ofSeconds(5)) // Freqüència de comprovació .ignoring(NoSuchElementException.class); // Excepcions a ignorar // Funció per trobar l'element WebElement element = wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(By.id("dynamicElement")); } }); // Accions amb l'element element.click(); driver.quit(); } }
Explicació del Codi
FluentWait<WebDriver>
: Crea una instància de FluentWait per al WebDriver.withTimeout(Duration.ofSeconds(30))
: Estableix el temps màxim d'espera a 30 segons.pollingEvery(Duration.ofSeconds(5))
: Defineix que el WebDriver comprovarà la condició cada 5 segons.ignoring(NoSuchElementException.class)
: Indica que s'ignoraran les excepcionsNoSuchElementException
durant l'espera.apply(WebDriver driver)
: Defineix la funció que comprovarà la condició, en aquest cas, trobar un element amb l'ID "dynamicElement".
Exercici Pràctic
Objectiu: Implementar una espera fluida per trobar un element que apareix de manera dinàmica en una pàgina web.
- Configura el teu entorn de desenvolupament amb Selenium i el controlador del navegador.
- Crea un script que obri una pàgina web amb elements dinàmics.
- Implementa una espera fluida per trobar un element específic.
- Realitza una acció sobre l'element (per exemple, un clic).
- Tanca el navegador.
Solució
Segueix l'exemple de codi proporcionat anteriorment per implementar l'exercici. Assegura't de substituir "path/to/chromedriver"
amb el camí correcte al teu controlador de Chrome i "http://example.com"
amb l'URL de la pàgina web que utilitzaràs per a la prova.
Conclusió
Les esperes fluents són una eina poderosa per gestionar la sincronització en Selenium, especialment quan treballes amb aplicacions web dinàmiques. Proporcionen un control detallat sobre la freqüència i la durada de les esperes, millorant la robustesa dels teus scripts de prova. Practica l'ús d'esperes fluents per familiaritzar-te amb aquesta tècnica i millorar les teves habilitats d'automatització de proves.
Automatització de Proves amb Selenium
Mòdul 1: Introducció a l'Automatització de Proves
- Què és l'Automatització de Proves?
- Beneficis de l'Automatització de Proves
- Visió General de Selenium
- Configuració del Teu Entorn
Mòdul 2: Començant amb Selenium
- Introducció a Selenium WebDriver
- Instal·lació de Selenium WebDriver
- Primer Script de Selenium
- Comprensió de la Interfície WebDriver
Mòdul 3: Localització d'Elements Web
- Introducció als Localitzadors
- Ús de Localitzadors ID i Nom
- XPath i Selectors CSS
- Estratègies Avançades de Localització
Mòdul 4: Interacció amb Elements Web
- Realització d'Accions sobre Elements Web
- Gestió de Desplegables i Caixes de Selecció
- Treballant amb Alertes i Pop-ups
- Gestió de Finestres del Navegador i Frames
Mòdul 5: Sincronització en Selenium
Mòdul 6: Marc de Proves i Selenium
- Introducció a TestNG
- Configuració de TestNG amb Selenium
- Creació de Casos de Prova TestNG
- Proves Basades en Dades amb TestNG
Mòdul 7: Conceptes Avançats de Selenium
- Gestió de Trucades AJAX
- Treballant amb Cookies
- Captura de Captures de Pantalla
- Execució de JavaScript amb Selenium
Mòdul 8: Selenium Grid i Proves en Paral·lel
- Introducció a Selenium Grid
- Configuració de Selenium Grid
- Execució de Proves en Paral·lel
- Proves Multinavegador
Mòdul 9: Integració Contínua i Selenium
- Introducció a la Integració Contínua
- Integració de Selenium amb Jenkins
- Automatització de l'Execució de Proves
- Informes i Registre