Как сделать WebDriver не закрывать окно браузера после каждого теста?

голоса
3

Я новичок в обоих Selenium WebDriver и Java. У меня есть веб-сервисы на моем сайте на странице /someservice.php. Я написал несколько тестов на Selenuim и они прекрасно работают. Пример кода (Основной класс):

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

Пример кода (тест-класс)

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

}

Теперь у меня есть 2 теста, как, что с 3 параметрами каждый (всего 6 вариантов). Как вы можете видеть в каждом варианте создать новое окно браузера и когда я бегу все 6 вариантов, которые занимают слишком много времени (до 80 секунд).

Как я могу запустить все варианты в одном окне браузера, чтобы ускорить мои тесты?

Задан 22/04/2015 в 05:38
пользователем
На других языках...                            


2 ответов

голоса
1

Просто переместите содержимое государственного статической силы близко () метода из ваших SiteClass методы tearDownClass () в классе DiamTest. Таким образом , окно браузера будет закрыто , когда выполнение класса закончило (из - за @AfterClass аннотации). Ваш код затем должен выглядеть следующим образом :

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

Это также хорошая практика, чтобы переместить инициализацию окна браузера setUpClass () метод, который будет выполняться перед каждым тестом класса (в соответствии с @BeforeClass аннотации)

//DiamTest class
@BeforeClass
    public static void setUpClass() {
        //Here we initialize the firefox webdriver
        driver=new FirefoxDriver();
        driver.get(url);
    }
Ответил 22/04/2015 в 06:32
источник пользователем

голоса
0

Что вам нужно сделать , это разделить ваш класс помощи со всеми тестами, это значит, вы должны создать экземпляр SiteClass внутри setUpClass метода. Этот метод аннотируется @BeforeClass , обеспечивающего тестовый класс будет создано этот метод будет выполняться перед тем тест выполняется.

Вы можете прочитать больше о @BeforeClass в JUnit документ : или иметь простой обзор в этом ответе.

Вам также необходимо сделать некоторые переписать код, чтобы разрешить общий доступ водителя с другим тестом, что-то вроде этого:

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

    }

а также:

    public class SiteClass {
            static WebDriver driver;

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

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

            ...

Совет: Вы должны прочитать о TestPyramid .

Поскольку функциональные тесты являются дорогостоящими, вы должны заботиться о том, что действительно необходимо испытание. Эта статья об этом.

Ответил 22/04/2015 в 06:46
источник пользователем

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