Come fanno WebDriver non per chiudere la finestra del browser dopo ogni prova?

voti
3

Sono nuovo in entrambe selenio WebDriver e Java. Ho alcuni servizi web sul mio sito a pagina /someservice.php. Ho scritto alcuni test su Selenuim e funzionano bene. Esempio di codice (Main Class):

    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;
      }
    }

Esempio di codice (classe 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();
    }

}

Ora ho 2 test come quello con 3 parametri ciascuno (totale 6 varianti). Come si può vedere in ogni variante creo nuova finestra del browser e quando ho eseguito tutti i 6 varianti che prendono troppo tempo (fino a 80 secondi).

Come posso eseguire tutte le varianti in una finestra del browser per accelerare i miei test?

È pubblicato 22/04/2015 alle 05:38
dall'utente
In altre lingue...                            


2 risposte

voti
1

Basta spostare i contenuti del public static void close () metodo dal tuoi SiteClass metodo tearDownClass () in classe DiamTest. In questo modo la finestra del browser verrà chiusa quando l'esecuzione classe finito (a causa della @AfterClass annotazione). Il vostro codice allora dovrebbe essere simile a questo:

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

E 'anche una buona pratica per spostare inizializzazione finestra del browser per setUpClass () metodo che sarà eseguito prima di ogni classe di test (secondo @BeforeClass annotazione)

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
Risposto il 22/04/2015 a 06:32
fonte dall'utente

voti
0

Quello che dovete fare è di condividere la vostra classe di aiuto con tutti i test, questo significa, è necessario creare un'istanza di SiteClass all'interno del vostro setUpClass metodo. Questo metodo è annotato con @BeforeClass assicurando la vostra classe di test creerà questo metodo verrà eseguito prima essere eseguito tutti i test.

Si può leggere di più su @BeforeClass in JUnit doc : o avere una semplice panoramica in questa risposta.

Avrete anche bisogno di fare un po 'di riscrittura del codice per consentire la parte del conducente con l'altro test, qualcosa di simile a questo:

    @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));
        }

    }

e:

    public class SiteClass {
            static WebDriver driver;

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

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

            ...

Suggerimento: Si consiglia di leggere la TestPyramid .

Dal momento che i test funzionali sono costosi, si dovrebbe cura di ciò che è realmente prova necessaria. Questo articolo è su questo.

Risposto il 22/04/2015 a 06:46
fonte dall'utente

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