t.me/atinfo_chat Telegram группа по автоматизации тестирования

Non static webDriver открывает милион окон

windows
selenium
java
webdriver
Теги: #<Tag:0x00007f9e44f65ab0> #<Tag:0x00007f9e44f65970> #<Tag:0x00007f9e44f65830> #<Tag:0x00007f9e44f656f0>

(Salciuc Vitalie) #1

Проблема заключается в том что у меня были статический WebDriver и он не ранел если тесты больше одного и за статического webDriver то session id = null когда я делал 1 раз .quit() , я убрал статику но он ночинает делать такой бардак саздает по н-каличеству окон на 1 тест сколько тестов
вот метод

 public WebDriver webDriver;

    public WebDriver initialiseDriver(BrowserType browserType) throws Exception {
        switch (browserType) {
            case Chrome:
                System.setProperty("webdriver.chrome.driver", "src/main/resources/drivers/chromedriver.exe");
                if (webDriver == null) {
 webDriver = new ChromeDriver(); ...
return webDriver;
и тд 

дальше я в свойх беформ метод иго вызываю

  @Before
    public void setUp() throws Exception {
        WebDriverFactory webDriverFactory = new WebDriverFactory() ;
        webDriver = webDriverFactory.initialiseDriver(BrowserType.Chrome);
        infrastructurePage = new InfrastructurePageImpl(webDriver);

    }

и тогда ночинается полный бардак
что делать чтобы небыло бардака и тесты так спакойно поодному ранилиси ))
благадарю зарание за помошь (и сорян за граматику :grin: )


(Дмитрий Еремин) #2

После каждого теста, так же делать

@After
public void tearDown(){
   if (webDriver != null)
    webDriver .quit();
}

Тогда у вас, перед каждым тестом будет открываться новый чистый браузер (Before), а после каждого теста (успешного или упавшего), закрываться (After)


(Vladislav Sobol) #3

У вас, судя по всему стоит parallel=classes или parallel=methods, раз драйвер открывает много окон сразу. Чтобы такого не было вам выше написали, если вы открыли драйвер в Before то его нужно закрыть в After. Также уберите паралелизацию (если таковая имеется)


(Salciuc Vitalie) #4
 @After
    public void close() {
        if (webDriver != null){
            webDriver.quit();
            webDriver = null;
        }
    }

у меня сидит в автер метод что-бы закрывалиси окна но проблема не в том что он их не закрывает проблема в том что он открывает все сразу


(Дмитрий Еремин) #5

тогда, действительно, стоит посмотреть на ваше распараллеливание


(Vladislav Sobol) #6

Покажите ваш xml сьют и pom.xml. У вас там явно гдето паралельность стоит


(Salciuc Vitalie) #9

Нашол ответ т оставлю это тут вруг комунибуть пригодится
кароч в интернете много ответов и они типо убери статику или ThreadLocal или что-то такое ну так вот убирете статику и вы сразу станете ограниченым:
1 вам придется согдавать 1 дравйвер и сним ити докоца и в этом случие у вас получется что если у вас есть дапустем логин класс с иго методами и там дапустем клас каторый пишет пост то какбы один зависет от другово и вам видемо придется в этом же тесте переписать логи (может и нет я новичеок и делюсь своими мыслями) чтобы этого избежать вам придется

  1. вызывать беформ мето только в заключительном классе чтобы вызволся .quit если нет то у вас будет session null и провалется тест
  2. вызывать метод закрываюший допустим Public void close() в класе в катором иницыализируется веб дравер а не в тест класе
    в этом случие он обнулит тот дравер кторого вы ждете что он будет нулл (в маем случие)
WebDriver driver ...
if(driver =null){
driver = new YourDriver
...
}

и он абнулит ваш дравйвер и будет и сингэлтон и все красиво ))


(Vladislav Abramov) #10

вам на udaff.com


(Julian Kolodzey) #11

Тролль…

  1. Создать синглтон вебдрайвера:
public class WebDriverSingleton {

  private WebDriver driver;

  public static getDriver() {
    if (driver == null) {
      driver = new ChromeDriver();
    }
    return driver;
  }

  public static killDriver() {
    driver.quit();
    driver = null;
  }
}
  1. Выполнять getDriver() либо в @Before... либо в @Test
  2. В @After... вызывать killDriver()