Можно ли запустить несколько селенов для одного сервера селена? - PullRequest
0 голосов
/ 02 апреля 2011

Это действительный код?

selenium = new DefaultSelenium("localhost", 4444, "*iehta",
        "http://www.google.com/");

selenium.start();

...

selenium.stop();

...

selenium.start();

...

selenium.stop();

Ответы [ 4 ]

2 голосов
/ 06 апреля 2011

Нет ничего плохого в том, что открыто несколько браузеров (то, что вы называете «селенами»).Фактически, это единственный способ протестировать определенные приложения.Представьте себе приложение с административным пользовательским интерфейсом и пользовательским интерфейсом, где вы вносите изменения на стороне администратора и проверяете их влияние на стороне пользователя.Вы можете написать свой тест, чтобы переходить туда и обратно между двумя в одном сеансе браузера, или вы можете открыть два браузера, по одному для каждого аспекта приложения.Первая - обычная техника, но вторая намного чище.

0 голосов
/ 03 апреля 2011

Обычно вы должны сохранять start () и stop () при настройке и отключении методов. При использовании TestNG вы можете аннотировать затем аннотациями @BeforeClass и @AfterClass. Следовательно, браузер будет запускаться и закрываться только до и после тестового метода в классе.

ч / б вы поддержали предложение Селена в области 51 - http://area51.stackexchange.com/proposals/4693/selenium Это предложение поддержано SeleniumHQ, и нам нужно больше пользователей, чтобы принять его, чтобы он увидел день света.

0 голосов
/ 04 апреля 2011

Это была моя ошибка.

Неожиданное поведение, вызванное этим кодом и возникающее из-за того, что я останавливал селен два раза (объект селен никогда не становится нулевым):

public class SeleniumController {
    private static Selenium selenium; 

    public static Selenium startNewSelenium(){
        // if already exists stop it and replace with new one 
        if(selenium != null){
            selenium.stop();
        }

        selenium = createNewSelenium(getCurContext());
        return selenium;
    }

    public static void stopSelenium() {
        if(selenium != null){
            selenium.stop();
        }
    }   

    private static Selenium createNewSelenium(TestContext testContext){
        TestProperties testProps = new TestProperties(testContext);
        ExtendedSelenium selenium = new ExtendedSelenium("localhost", RemoteControlConfiguration.DEFAULT_PORT,
                testProps.getBrowser(), testProps.getServerUrl());
        selenium.start();
        selenium.useXpathLibrary("javascript-xpath");
        selenium.allowNativeXpath("false");     
        return selenium;
    }  
}

Правильный код класса:

public class SeleniumController {
    private static Selenium selenium; 

    public static Selenium startNewSelenium(){
        // if already exists stop it and replace with new one 
        stopSelenium();        
        selenium = createNewSelenium(getCurContext());
        return selenium;
    }  

    public static void stopSelenium() {
        if(selenium != null){
            selenium.stop();
            selenium = null;
        }
    }       

    private static Selenium createNewSelenium(TestContext testContext){
        TestProperties testProps = new TestProperties(testContext);
        ExtendedSelenium selenium = new ExtendedSelenium("localhost", RemoteControlConfiguration.DEFAULT_PORT,
                testProps.getBrowser(), testProps.getServerUrl());
        selenium.start();
        selenium.useXpathLibrary("javascript-xpath");
        selenium.allowNativeXpath("false");     
        return selenium;
    }  
}
0 голосов
/ 02 апреля 2011

А почему вы думаете, что это не должно быть безопасно? если это не работает нормально, это нормально. Если это не так, то воссоздать объект DefaultSelenium снова, это не замедлит ваш код в любом случае

...