2015-10-14 3 views
4

В настоящее время я использую Cucumber и Selenium WebDriver в Java для тестирования веб-приложения. Я не очень доволен тем, что браузер закрыт и повторно открыт между каждым тестовым случаем.Cucumber + Selenium Java: держите браузер открытым между тестовыми примерами

Во-первых, это довольно медленно, и, кроме того, для меня это не имеет никакого смысла.

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

Я думал, что эта линия может сделать работу, но она не работает, как ожидалось:

driver.navigate().to("http://myurl.url"); 

Вместо:

driver.get("http://myurl.url"); 

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

+0

Вы можете использовать QMetry Automation Framework [https://qmetry.github.io/qaf/qaf-2.1.9/gherkin_client.html#benefits-of-using-qaf-gherkin-scenario-factory] и использовать различные функции его для таких общих требований к веб-автоматизации. – user861594

ответ

7

Я нашел способ открыть мой браузер между тестами. Я использовал Singleton Design Pattern с picocontainer. Я объявляю свой браузер в static в этом классе.

public class Drivers { 
    private static boolean initialized = false; 
    private static WebDriver driver; 

    @Before 
    public void initialize(){ 
     if (!initialized){ 
      initialized = true; 
      driver = new FirefoxDriver(); 
      driver.get("http://myurl.url"); 
     } 
    } 
    public static WebDriver getDriver(){ 
     return driver; 
    } 
} 

В каждом StepDefinitions классе, у меня есть конструктор, который инстанцирует мой Singleton.

public class DashboardSteps extends SuperSteps { 
    Drivers context; 

    @After 
    public void close(Scenario scenario) { 
     super.tearDown(scenario); 
     loginPage = homePage.clickLogout(); 
     loginPage.waitPageLoaded(); 
    } 

    public DashboardSteps(Drivers context) { 
     super(context); 
    } 

В SuperSteps класс:

public class SuperSteps { 
    protected Drivers context; 

    public SuperSteps(Drivers context){ 
     this.context = context; 
    } 

Как вы можете видеть, я возвращаюсь к странице Логина после каждого теста, так что я могу запустить тесты каждые независимо друг от друга.

+0

Я вижу слезу в файле класса SubStep. Разве это не ограничение, которое должно быть записано в каждом файле подэлементного класса ?. Убедитесь, что пользователь вышел из системы, если вошел в систему на этапе инициализации, решает эту проблему? –

+0

Правильно, что вы можете проверить, что пользователь выведен в инициализацию. Но если я правильно помню, subClass не наследует от аннотаций SuperClass, поэтому вам нужно вызвать tearDown в каждом файле класса SubStep. –

+0

@Niclolas -> Ты спас меня :) –

0

Если я правильно м конкретизация ур браузера может происходить в методе @Before отмечено setUp и закрытие будет происходить в @After отмечен tearDown метода. Если вы хотите прекратить закрытие браузера, просто закомментируйте этот код в tearDown или когда вы это делаете.

+0

Привет, спасибо за ответ. Вы правы, но проблема в том, что я должен перейти к URL-адресу. Чтобы сделать это, я установил его в «@Before». В моем методе «@After» я не закрываю браузер, но в следующем тесте «@Before» открывает новый браузер. –

+0

еще один взломать, если вы не хотите запускать свои тесты параллельно, а затем установите флаг в Before Method и выполните проверку после метода, если есть больше тестов для запуска или текущий тест является последним тестом. Как только вы достигнете последнего теста в @ после закрытия браузера. –

0

Вы можете использовать аннотации @BeforeClass и @AfterClass. Они работают до @Before и после @After соответственно. Предполагая, что тестовые примеры, которые вы пытаетесь протестировать, находятся в одном классе, вы можете инициализировать свой WebDriver в методе @BeforeClass и закрыть его в методе @AfterClass.

+0

На самом деле у меня нет всех моих тестов в одном классе. Именно по этой причине у меня есть эта проблема. Я не могу найти решение прямо сейчас :( –

+0

Одна из проблем, с которыми вы столкнетесь, заключается в том, что JUnit не дает никаких обещаний о порядке выполнения ваших тестов.Вы можете сбросить их все в Suite, но это не поможет перезапустить браузер. Почему именно вы надеетесь оставить браузер открытым? Это чисто для скорости, или есть другие причины? – Tyler

+0

Основная причина для скорости. Когда вы запускаете тесты 2k, open/close добавляет слишком много времени в процесс. Но это также потому, что я думаю, что это не нужно так работать. –

Смежные вопросы