La sincronització és un concepte clau en l'automatització de proves amb Selenium. Quan executem scripts de prova, sovint ens trobem amb situacions on els elements web no estan disponibles immediatament per a la interacció. Això pot ser degut a càrregues de pàgina, trucades AJAX, o altres processos asíncrons. La sincronització ens ajuda a gestionar aquests escenaris per assegurar que els nostres scripts de prova s'executin de manera fiable.
Conceptes Clau de la Sincronització
-
Sincronització Implícita vs. Explícita:
- Esperes Implícites: Configuren un temps d'espera global per a tots els elements. Si un element no està disponible immediatament, WebDriver esperarà un temps determinat abans de llançar una excepció.
- Esperes Explícites: Són més flexibles i permeten esperar condicions específiques per a elements particulars.
-
Problemes Comuns de Sincronització:
- Elements que no es carreguen a temps.
- Canvis dinàmics en la interfície d'usuari.
- Trucades AJAX que retarden la disponibilitat dels elements.
-
Estratègies de Sincronització:
- Utilitzar esperes implícites per a sincronització bàsica.
- Implementar esperes explícites per a escenaris complexos.
- Considerar esperes fluents per a una major flexibilitat.
Exemples Pràctics
Esperes Implícites
Les esperes implícites són fàcils de configurar i s'apliquen a tots els elements del WebDriver. Aquí teniu un exemple de com configurar una espera implícita:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; public class ImplicitWaitExample { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); // Configura una espera implícita de 10 segons driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://example.com"); // Aquí pots interactuar amb els elements de la pàgina // WebDriver esperarà fins a 10 segons per a cada element } }
Esperes Explícites
Les esperes explícites són més precises i s'utilitzen per esperar condicions específiques. Aquí teniu un exemple d'espera explícita:
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.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class ExplicitWaitExample { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("http://example.com"); // Configura una espera explícita de 10 segons WebDriverWait wait = new WebDriverWait(driver, 10); // Espera fins que l'element sigui visible WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId"))); // Ara pots interactuar amb l'element } }
Exercici Pràctic
Objectiu: Implementar una espera explícita per esperar que un botó sigui clicable abans de fer clic.
- Obre una pàgina web que contingui un botó que es carrega dinàmicament.
- Utilitza una espera explícita per esperar que el botó sigui clicable.
- Fes clic al botó un cop sigui clicable.
Solució:
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.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class WaitForButtonClickable { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("http://example.com"); WebDriverWait wait = new WebDriverWait(driver, 10); // Espera fins que el botó sigui clicable WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("buttonId"))); // Fes clic al botó button.click(); } }
Conclusió
La sincronització és essencial per assegurar que els scripts de prova amb Selenium s'executin de manera fiable i consistent. Les esperes implícites i explícites són eines poderoses que ajuden a gestionar la disponibilitat dels elements web. En el proper tema, explorarem les esperes fluents, que ofereixen una major flexibilitat en la gestió de la sincronització.
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