Я тоже застрял в той же проблеме на некоторое время. Я объясню это в самых простых возможных терминах. Рассмотрим следующий пример:
Class A (contains the code selenium.start();)
|
|(inherited classes)
|--------class B }
|--------class C } Have some @Test methods
|--------class D }
Теперь каждый раз, когда мы запускаем эти тестовые методы, он выполняет код в конструкторе родительского класса selenium.start (); Вот когда на вашем экране откроются все браузеры.
Теперь один за другим будут выполняться тестовые методы - предположим, что тесты в классе B выполняются, они будут происходить в одном окне, для класса C - в другом и т. Д.
Таким образом, по сути, все, что вам нужно сделать, это удалить код start () из родительского конструктора и поместить его где-нибудь в классы B, C и D.
Пока вы продолжаете работать с одним объектом селена, все будет происходить в одном окне браузера. Когда вы положили начало (); этот браузер откроется (если он не был открыт) и будет создан новый сеанс. стоп(); и сеанс прекращается.
Поток управления идет следующим образом =>
Class A, Class B
Class A, Class C
Class A, Class D
Таким образом, если вы сможете найти способ продолжать использовать один и тот же объект селена только с 1 start () и 1 stop () для всей последовательности выполнения, показанной выше, выполнение теста будет происходить только в одном окне браузера.
Если вы поместите код start () в класс A и код остановки в каждый из B, C и D, то у вас будет открыто 3 окна, и одно за другим они будут закрываться по мере выполнения.
Если вы поместите код start () и stop () по отдельности в B, C и D, то вы увидите одно открытие браузера, выполнение тестовых случаев, закрытие. Затем откроется другой, выполнит контрольные примеры для C, закроет и т. Д.
Надеюсь, это поможет. : -)