Comment faire WebDriver ne pas fermer la fenêtre du navigateur après chaque test?

voix
3

Je suis nouveau dans les deux Sélénium WebDriver et Java. J'ai quelques webservices sur mon site à la page /someservice.php. Je l'ai écrit quelques tests sur Selenuim et ils fonctionnent très bien. Exemple de code (classe principale):

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

Exemple de code (Classe d'essai)

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

}

Maintenant, j'ai 2 tests comme ça avec 3 paramètres chacun (total 6 variantes). Comme vous pouvez le voir dans toutes les variantes que je crée une nouvelle fenêtre du navigateur et quand je lance les 6 variantes qui prennent trop de temps (jusqu'à 80 secondes).

Comment puis-je exécuter toutes les variantes dans une seule fenêtre du navigateur pour accélérer mes tests?

Créé 22/04/2015 à 05:38
utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Il suffit de déplacer le contenu de proximité void () public static méthode de votre SiteClass à la méthode tearDownClass () dans la classe DiamTest. De cette façon , la fenêtre du navigateur sera fermé lorsque l'exécution de la classe terminée ( en raison de l' annotation @AfterClass). Alors votre code devrait ressembler à ceci:

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

Il est également une bonne pratique pour déplacer l'initialisation de la fenêtre du navigateur à la méthode setUpClass () qui sera exécutée avant chaque classe de test (selon l'annotation @BeforeClass)

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
Créé 22/04/2015 à 06:32
source utilisateur

voix
0

Ce que vous devez faire est de partager votre classe d'aide avec tous vos tests, cela signifie, vous devez créer une instance de SiteClass dans votre setUpClass méthode. Cette méthode sont annotés avec @BeforeClass votre classe assurant test créer cette méthode sera exécutée avant tout le test soit exécuté.

Vous pouvez en savoir plus sur @BeforeClass dans jUnit doc : ou avoir une vue d' ensemble simple dans cette réponse.

Vous aurez également besoin faire quelques Réécriture du code pour permettre la part du conducteur avec l'autre test, quelque chose comme ceci:

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

    }

et:

    public class SiteClass {
            static WebDriver driver;

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

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

            ...

Astuce: Vous devriez lire au sujet de la TestPyramid .

Les tests fonctionnels sont chers, vous devriez vous intéresser à ce qui est vraiment nécessaire aux essais. Cet article est à ce sujet.

Créé 22/04/2015 à 06:46
source utilisateur

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