studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones java selenium frameworks webdriver alerts

java - programacion - Cómo escribir un código que se ejecutará después de ejecutar cada paso



manual de programacion android pdf (3)

WebDriver tiene oyente WebDriverEventListener para lo que intenta hacer exactamente. Al implementar este oyente y registrar el controlador, puede obtener este método checkAlert llamado detrás de escena antes / después de cada acción que realizará con webdriver.

Echale un vistazo a éste ejemplo.

http://toolsqa.com/selenium-webdriver/event-listener/

La aplicación en la que trabajo arroja muchas alertas inesperadas. Quería implementar una forma de atrapar todo esto a través de un método común que es la presencia de Alert.

Pero, ¿cómo llamar a isArtentntnt para cada paso en webrriver? ¿Alguien puede ayudarme aquí?

Por lo general, mi método sería así:

public void checkAlert() { try { WebDriverWait wait = new WebDriverWait(driver, 2); wait.until(ExpectedConditions.alertIsPresent()); Alert alert = driver.switchTo().alert(); alert.accept(); } catch (Exception e) { //exception handling } }

El problema es cómo llamarlo antes de cada paso. Sé que esto hará que mi código sea lento, pero lamentablemente quiera que esto se implemente.

Estoy buscando algo que se ejecute después de cada comando / paso en mi prueba. ¿Es esto posible?

Actualmente llamo a este método en todos los escenarios esperados con una captura de prueba.


Ya se proporciona una buena respuesta utilizando el evento-oyente.

Otra forma simple de manejar, si está utilizando palabras clave / métodos para todas las acciones de selenio. Lo que quería decir es que si está utilizando el método click ("locator") para hacer clic en sus casos de prueba en lugar de escribir el comando del controlador una y otra vez, puede insertar ese comando de verificación cruzada después de hacer clic en ese método .

public void myClick(String myxpath){ driver.findElement(By.xpath(myxpath)).click(); //calling checkAlert method to cross check }

así que si está utilizando métodos como hacer clic, ingresar, etc. para las acciones de selenio, entonces puede intentarlo como se indica arriba.

Gracias, Murali


I could think of a solution using a Thread, which always monitors if there is any alert present, if yes then accept else don''t do any thing. Considering you are using a testNG or Junit framework, here is the sample: package poc.grid; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.NoAlertPresentException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; public class Test { static WebDriver driver; //This method returns a Thread, which monitors any alert and accept whenever finds it. And this return a Thread object. public static Thread handleAlert(final WebDriver driver) { Thread thread = new Thread(new Runnable() { public void run() { while(true) { try { System.out.println("Checking alert .... "); driver.switchTo().alert().accept(); System.out.println("Alert Accepted. "); }catch(NoAlertPresentException n){ System.out.println("No Alert Present. "); }catch (Exception e) { System.out.println("Exception: "+e.getMessage()); } } } }); return thread; } @BeforeTest public void beforeTest() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); //In before Test, just call Thread and start it. handleAlert(driver).start(); } //This is your normal Test @org.testng.annotations.Test public static void test() { try { driver.get("https://payments.billdesk.com/pb/"); int i=0; while(i<=10) { driver.findElement(By.xpath("//button[@id=''go'']")).click(); Thread.sleep(2000); i++; } }catch(Exception e) { System.out.println("Exception: "+e.getMessage()); } } //At the end of test, you can stop the Thread. @AfterTest public void afterTest() { handleAlert(driver).stop(); } }