Повторное использование сеанса браузера Java Selenium


Мой вопрос заключается в следующем: как я могу повторно использовать сеанс браузера для тестов, которые находятся в разных классах java? У меня браузер открыт вот так:

public class OpenBrowser {

    public static WebDriver driver;

    @BeforeSuite
    public static void openb() {
        // Create a new instance of the Firefox driver
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
}

Затем я должен войти на сайт, используя некоторые учетные данные, и после того, как он зарегистрирован, я хочу выполнить другие тесты, я не хочу входить в систему для каждого теста, потому что их много, которые мне нужно сделать, и вход в систему для каждого займет десятилетие. Например, поток выглядит так: войти- > нажать какой-то компонент - >добавить какой-то компонент значения - > создать отчет. После этого я хотел бы сгенерировать другой отчет по другому компоненту, но когда я пытаюсь, он дает исключение null-указателя. Есть идеи? :)

3 2

3 ответа:

В Selenium 2 с WebDriver вы можете вызвать

driver = new FirefoxDriver();

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

Или вы можете закрыть его с помощью driver.Quit().

Собственно, что я хочу делать?

Мне нравится закрывать окно браузера между тестами, чтобы я знал, что мои тесты не являются "грязными" с сохраненными данными сеанса, которые могут повлиять на выполнение тестов, но я могу видеть значение в некоторых целевых тестах, где я хочу попробовать пара различных сценариев при сохранении одного и того же сеанса.

Для уровня кода: Вы можете проверить, является ли он нулевым или нет. Если null, то вызовите браузер, чтобы дать другой.

/**
 * Driver for web application.
 * 
 * @return driver Browser
 * @throws IOException
 */
public WebDriver getDriverBrowser() throws IOException {

if (driverBrowser == null) {
    String sBrowser = PropertyLoader.loadProperty("browser");
    driverBrowser = getBrowser(sBrowser);
    driverBrowser
            .manage()
            .timeouts()
            .implicitlyWait(
                    Integer.valueOf(PropertyLoader
                            .loadProperty("implicit_timeout_sec")),
                    TimeUnit.SECONDS);
    driverBrowser.manage().window().maximize();
}
return driverBrowser;
}

Или вы можете использовать конфигурацию xml для использования некоторых тестовых случаев в качестве класса или конкретного теста.Используя TestNG, вы можете указать, какие тесты вы хотите запустить (TestNG will generate an XML file of all of the tests that fail, so when you run it, it will only execute the failed tests).

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

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

Вопрос-2: Как я могу реализовать базовую отправную точку?

Это зависит от вас. Сначала вы должны проанализировать тестовые случаи, а затем выбрать, какая точка может быть отправной точкой для всех или набора некоторых тестовых случаев. Тогда ты сможешь это сделать.

Подробнее:

  1. https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/3927
  2. https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows

Один из простых способов, который я недавно выяснил, состоит в том, чтобы сделать webdriver статическим в классе и повторно использовать тот же webdriver в любом другом тестовом случае

Например в testcase1:

public class globallogin { 
    static WebDriver driver = new ChromeDriver(); 
} 

Теперь вы можете вызвать тот же webdriver в тестовом примере 2 как:

public class skucategory {

    static globallogin login = new globallogin(); 

    public static void main(String[] args) { 
        login.driver.get(<URL>); 
    } 
}

Вы должны проверить с помощью qmetry Automation framework он обеспечивает управление драйверами через TestBase. Вам не нужно создавать экземпляр драйвера, просто настройте в свойстве или файле конфигурации xml и используйте драйвер в любом классе с помощью вызова getDriver ().

WebDriver driver = WebDriverTestBase.getDriver();

Он также имеет различные концепции дизайна, такие как тестовая страница, тестовый шаг, DataBean, хранилище локаторов , тестирование на основе данных слушатели и многое другое.

Для настройки драйвера можно задать свойство driver.name вне кода с именем драйвера, например

driver.name=firefoxDriver

Если вы хотите работать на нескольких браузерах параллельно, вы можете предоставить драйвер в файле конфигурации xml, например:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="QAF-Gherkin-Demo" verbose="0" parallel="methods" thread-count="10">
    <test name="Run_on_FF">
        <parameter name="driver.name" value="firefoxDriver"/>
        <packages>
            <package name="my.pkg"/>
        </packages>
    </test>
    <test name="Run_on_chrome">
        <parameter name="driver.name" value="chromeDriver"/>
        <packages>
            <package name="my.pkg"/>
        </packages>
    </test>
</suite>

В приведенном выше примере он будет выполнять все тесты в my.pkg параллельно в двух разных браузерах. вам не нужно создавать или совсем драйвер объекта в ваш код.

Он также имеет механизм для повторной попытки, если создание драйвера не удается, что весьма полезно, когда вы запускаете тест в облаке.