Cómo hacer WebDriver de no cerrar la ventana del navegador después de cada prueba?

votos
3

Soy nuevo en tanto Selenio WebDriver y Java. Tengo algunos servicios web en mi sitio en la página /someservice.php. He escrito algunos ensayos sobre Selenuim y funcionan bien. ejemplo de código (clase principal):

    public class SiteClass {
    static WebDriver driver;
    private static boolean findElements(String xpath,int timeOut ) {
public static void open(String url){
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
    public static void close(){
        driver.close();
    }
            WebDriverWait wait = new WebDriverWait( driver, timeOut );
            try {
                if( wait.until( ExpectedConditions.visibilityOfElementLocated( By.xpath( xpath ) ) ) != null ) {
                    return true;
                } else {
                    return false;
                }
            } catch( TimeoutException e ) {
                return false;
            }}
    public static Boolean CheckDiameter(String search,String result){
          driver.findElement(By.xpath(//input[@id='search_diam'])).sendKeys(search);
          WebDriverWait wait = new WebDriverWait(driver, 5);
          WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(//div[@class='ac_results'][last()]/ul/li)));
          WebElement searchVariant=driver.findElement(By.xpath(//div[@class='ac_results'][last()]/ul/li));
          Actions action = new Actions(driver);
          action.moveToElement(searchVariant).perform();
          driver.findElement(By.xpath(//li[@class='ac_over'])).click();
          Boolean iselementpresent = findElements(result,5);
          return iselementpresent;
      }
    }

Ejemplo de código (Clase Test)

    @RunWith(Parameterized.class)
public class DiamTest {@Parameters
    public static Collection<Object[]> diams() {
        return Arrays.asList(new Object[][] {
            { 111, //div[@class='jGrowl-message'],true},
            { 222, //div[@class='jGrowl-message'],false},
            { 333, //div[@class='jGrowl-message'],true},
        });
    }
    private String inputMark;
    private String expectedResult;
    private Boolean assertResult;

    public DiamTest(String mark, String result, boolean aResult) {
        inputMark=mark;
        expectedResult=result;
        assertResult=aResult;
    }

    @BeforeClass
    public static void setUpClass() {
    }

    @AfterClass
    public static void tearDownClass() {
    }

    /**
     * Test of CheckDiameter method, of class CableRu.
     */
    @Test
    public void testCheckDiameter() {
        SiteClass obj=new SiteClass();
         obj.open(http://example.com/services.php);
        assertEquals(assertResult, obj.CheckDiameter(inputMark, expectedResult));
        obj.close();
    }

}

Ahora tengo 2 pruebas como que con 3 parámetros cada uno (total de 6 variantes). Como se puede ver en cada variante se crea una nueva ventana del navegador y cuando corro todas las 6 variantes que toman demasiado tiempo (hasta 80 segundos).

¿Cómo puedo ejecutar todas las variantes en una ventana del navegador para acelerar mis pruebas?

Publicado el 22/04/2015 a las 05:38
por usuario
En otros idiomas...                            


2 respuestas

votos
1

Basta con mover contenido del public void close () Método de sus SiteClass al método tearDownClass () en la clase DiamTest. De este modo, la ventana del navegador se cerrará cuando la ejecución de clase terminó (a causa de @AfterClass anotación). Su código a continuación, debe tener este aspecto:

//DiamTest class
@AfterClass
    public static void tearDownClass() {
        driver.close();
    }

También es una buena práctica para mover inicialización ventana del navegador con el método que se ejecutará antes de cada clase de prueba setUpClass () (según @BeforeClass anotación)

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
Respondida el 22/04/2015 a las 06:32
fuente por usuario

votos
0

Lo que hay que hacer es compartir su clase de ayuda con todas sus pruebas, este medio, se debe crear una instancia de SiteClass dentro de su setUpClass método. Este método se anota con @BeforeClass asegurando su clase de prueba va a crear este método se ejecuta antes de ejecutar toda la prueba.

Puede leer más sobre @BeforeClass en jUnit doc : o tiene una visión simple en esta respuesta.

También tendrá que hacer un poco de reescritura de algo de código para permitir la participación del conductor con la otra prueba, algo como esto:

    @RunWith(Parameterized.class)
    public class DiamTest {

            @Parameters
        public static Collection<Object[]> diams() {
            return Arrays.asList(new Object[][] {
                { "111", "//div[@class='jGrowl-message']",true},
                { "222", "//div[@class='jGrowl-message']",false},
                { "333", "//div[@class='jGrowl-message']",true},
            });
        }
        private String inputMark;
        private String expectedResult;
        private Boolean assertResult;

        private static SiteUtil siteUtil; 

        public DiamTest(String mark, String result, boolean aResult) {
            inputMark=mark;
            expectedResult=result;
            assertResult=aResult;
        }

        @BeforeClass
        public static void setUpClass() {
            siteUtil = new SiteUtil();
        }

        @AfterClass
        public static void tearDownClass() {
            siteUtil.close();
        }

        @Test
        public void testCheckDiameter() {
            siteUtil.open("http://example.com/services.php");
            assertEquals(assertResult, obj.CheckDiameter(inputMark, expectedResult));
        }

    }

y:

    public class SiteClass {
            static WebDriver driver;

            public SiteClass() {
                driver = new FirefoxDriver();
            }

            public void open(String url){
                driver.get(url);
            }

            ...

Consejo: Usted debe leer sobre el TestPyramid .

Dado que las pruebas funcionales son caros, que deben preocuparse por lo que es realmente la prueba necesarios. Este artículo es sobre esto.

Respondida el 22/04/2015 a las 06:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more