test java selenium webdriver testng

test - Reutilización de la sesión del navegador Selenium java



testng eclipse (3)

Mi pregunta es la siguiente: ¿cómo puedo reutilizar una sesión del navegador para las pruebas que están en diferentes clases de Java? Tengo el navegador abierto así:

public class OpenBrowser { public static WebDriver driver; @BeforeSuite public static void openb() { // Create a new instance of the Firefox driver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } }

Luego, debo iniciar sesión en un sitio web utilizando algunas credenciales y, una vez registrado, deseo realizar otras pruebas, no quiero iniciar sesión para cada prueba porque hay muchas de ellas que debo hacer e iniciar sesión para cada una de ellas. toma una década. Por ejemplo, un flujo se ve así: Inicie sesión-> Presione algún componente-> Agregue algunos valores-> Genere un informe. Después de esto, me gustaría generar otro informe sobre otro componente, pero cuando lo intento da una excepción de puntero nulo. ¿Algunas ideas? :)


Debería consultar con el marco de QMetry Automation que proporciona administración de controladores a través de TestBase. No necesita crear una instancia de controlador, simplemente configure en propiedad o archivo de configuración xml y use el controlador en cualquier clase usando la llamada ''getDriver ()''.

WebDriver driver = WebDriverTestBase.getDriver();

También tiene diferentes conceptos de diseño como TestPage , TestStep , DataBean , Locator Repository , Data-Driven Testing Listeners y muchos más.

Para configurar el controlador, puede establecer la propiedad driver.name fuera del código con el nombre del controlador como

driver.name=firefoxDriver

Si desea ejecutar en múltiples navegadores en paralelo, puede proporcionar el controlador en el archivo de configuración xml como:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="QAF-Gherkin-Demo" verbose="0" parallel="methods" thread-count="10"> <test name="Run_on_FF"> <parameter name="driver.name" value="firefoxDriver"/> <packages> <package name="my.pkg"/> </packages> </test> <test name="Run_on_chrome"> <parameter name="driver.name" value="chromeDriver"/> <packages> <package name="my.pkg"/> </packages> </test> </suite>

En el ejemplo anterior, ejecutará todas las pruebas en my.pkg paralelo en dos navegadores diferentes. No necesita crear o bastante objeto de controlador en su código.

También tiene un mecanismo para volver a intentar si falla la creación del controlador, lo cual es bastante útil cuando está ejecutando pruebas en la nube.


Una de las formas simples que descubrí hace poco es hacer que el controlador web sea estático en clase y reutilizar el mismo controlador web en cualquier otro caso de prueba

Por ejemplo en testcase1:

public class globallogin { static WebDriver driver = new ChromeDriver(); }

Ahora puede llamar al mismo controlador de red en el caso de prueba 2 como:

public class skucategory { static globallogin login = new globallogin(); public static void main(String[] args) { login.driver.get(<URL>); } }


En Selenium 2 con WebDriver puede llamar

driver = new FirefoxDriver();

que engendra un navegador, y ese navegador permanecerá abierto durante la prueba,

o puede elegir cerrarlo con el driver.Quit() . driver.Quit() .

En realidad, ¿qué quiero hacer?

Me gusta cerrar la ventana del navegador entre las pruebas para saber que mis pruebas no están "sucias" con datos de sesión almacenados que podrían afectar el funcionamiento de las pruebas, pero puedo ver el valor en algunas pruebas específicas, donde quiero probar un par diferentes escenarios manteniendo la misma sesión.

Para el nivel de código: puede verificar si es nulo o no. Si es nulo, llama al navegador para dar otro.

/** * Driver for web application. * * @return driver Browser * @throws IOException */ public WebDriver getDriverBrowser() throws IOException { if (driverBrowser == null) { String sBrowser = PropertyLoader.loadProperty("browser"); driverBrowser = getBrowser(sBrowser); driverBrowser .manage() .timeouts() .implicitlyWait( Integer.valueOf(PropertyLoader .loadProperty("implicit_timeout_sec")), TimeUnit.SECONDS); driverBrowser.manage().window().maximize(); } return driverBrowser; }

O puede usar la configuración xml para usar algunos casos de prueba como nivel de clase o prueba específica. Al usar TestNG, puede especificar qué pruebas desea ejecutar ( TestNG will generate an XML file of all of the tests that fail, so when you run it, it will only execute the failed tests) .

Problema - 1: Quiero decir que no quiero volver a iniciar sesión para continuar las pruebas, no me importa si abre otra ventana, de hecho, como dijiste, es más confiable pero no útil si tengo que volver a iniciar sesión.

Si no desea iniciar sesión, entonces en cada caso de prueba, necesita un punto de partida base. Después de terminar cualquier caso de prueba, irá a la posición base y el próximo caso de prueba comenzará desde la base

Problema - 2: ¿Cómo puedo implementar un punto base de partida?

Es tu decision. Primero tiene que analizar los casos de prueba, luego debe seleccionar qué punto puede ser el punto de partida para todos o algunos de los casos de prueba. Entonces puedes hacerlo.

Para más:

  1. https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/3927
  2. https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows