webdriver her testten sonra tarayıcı penceresini kapatmak için değil yapmak nasıl?

oy
3

Ben Selenyum WebDriver ve Java hem de yeniyim. Ben sayfa /someservice.php üzerinde sitemde bazı webservices var. Ben Selenuim üzerinde birkaç test yazdım ve sorunsuz çalışırlar. Kod örneği (Ana Sınıfı):

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

Kod Örneği (Deney Sınıfı)

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

}

Şimdi 3 parametre her (toplam 6 varyantları) ile böyle 2 testleri var. Her varyant görebileceğiniz gibi ben yeni bir tarayıcı penceresi oluşturmak ve ben çok fazla zaman (en fazla 80 saniye) almak 6 varyantları çalıştırdığınızda.

Nasıl testleri hızlandırmak için bir tarayıcı penceresinde tüm varyantları çalıştırabilirim?

Oluştur 22/04/2015 saat 05:38
kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

Sadece içeriğini taşımak public void close () DiamTest sınıfında tearDownClass () yöntemini kullanarak SiteClass gelen yöntemle. Sınıf yürütme (çünkü @AfterClass ek açıklama) bittiğinde Bu şekilde tarayıcı penceresi kapanacak. Kodunuz sonra aşağıdaki gibi görünmelidir:

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

Bu (@BeforeClass açıklama göre) setUpClass (), her bir test sınıf önce yürütülür yönteme tarayıcı penceresi başlatma hareket ettirmek için de iyi bir uygulamadır

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
Cevap 22/04/2015 saat 06:32
kaynak kullanıcı

oy
0

Ne yapmanız gereken tüm testler ile yardım sınıfını paylaşan olduğunu bu kadar kırıcı sen bir örneğini oluşturmak gerekir SiteClass İçerideki setUpClass yöntemiyle. Bu yöntem tüm test yürütülecek önce bu yöntem çalıştırılacaktır yaratacak test sınıfını temin @BeforeClass not eklenmiş.

Sen jUnit içinde @BeforeClass hakkında daha fazla bilgi bulabilirsiniz doc : ya basit bir bakış var bu yanıtı.

Ayrıca pay başka testte, böyle bir şey ile sürücüyü olabilmesi için bazı yeniden yazma biraz kod yapmak gerekir:

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

    }

ve:

    public class SiteClass {
            static WebDriver driver;

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

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

            ...

İpucu: hakkında okumalısınız TestPyramid .

fonksiyonel testler pahalı olduğundan, gerçekten gerekli bir test ne önemsemeliyiz. Bu makale bu hakkındadır.

Cevap 22/04/2015 saat 06:46
kaynak kullanıcı

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