Hoe maken WebDrive niet naar de browser venster te sluiten na elke test?

stemmen
3

Ik ben nieuw in zowel Selenium WebDrive en Java. Ik heb een aantal webservices op mijn site op pagina /someservice.php. Ik heb paar tests op Selenuim schreven en ze werken prima. Code voorbeeld (hoofdklasse):

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

Code Voorbeeld (Test Class)

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

}

Nu heb ik 2 tests zoals die met 3 parameters elk (totaal 6 varianten). Zoals u kunt zien in elke variant creëer ik nieuw browservenster en wanneer ik alle 6 varianten die te veel tijd (tot 80 seconden) te nemen.

Hoe kan ik lopen alle varianten in een browservenster om vaart te zetten achter mijn tests?

De vraag is gesteld op 22/04/2015 om 05:38
user
In andere talen...                            


2 antwoorden

stemmen
1

Gewoon verplaatsen inhoud van public static void close () methode van je SiteClass naar tearDownClass () methode in DiamTest klasse. Op deze manier zal het browservenster worden gesloten wanneer de uitmuntende uitvoering voltooid (vanwege @AfterClass annotatie). Uw code dan moet er zo uitzien:

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

Het is ook een goede gewoonte om de initialisatie browservenster verplaatsen naar setUpClass () methode die zal worden uitgevoerd vóór elke test klasse (volgens @BeforeClass annotatie)

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
antwoordde op 22/04/2015 om 06:32
bron van user

stemmen
0

Wat u moet doen, is te delen uw hulp klas met al uw testen, dit bedoel, je moet een instantie van maken SiteClass in uw setUpClass methode. Deze methode zijn geannoteerd met @BeforeClass het verzekeren van uw test-klasse te maken van deze methode zal worden uitgevoerd voordat alle de test worden uitgevoerd.

U kunt meer lezen over @BeforeClass lezen in JUnit doc : of een eenvoudig overzicht in deze reactie.

U zult ook moeten doen wat herschrijven wat code te delen, zodat de bestuurder met de andere test, zoiets als dit:

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

    }

en:

    public class SiteClass {
            static WebDriver driver;

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

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

            ...

Tip: Je moet lezen over de TestPyramid .

Aangezien de functionele tests zijn duur, moet je zorg over wat echt nodig is test. Dit artikel gaat over dit.

antwoordde op 22/04/2015 om 06:46
bron van user

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