Подтвердить что ты не робот

Как закрыть все окно браузера, если активен webDriver?

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

Driver.close() просто закрывает одну вкладку браузера. Driver.quit() закрывает все браузеры, а также завершает сеанс WebDriver. Таким образом, я не могу запустить пакетное выполнение. Пожалуйста, предоставьте решение для этого.

4b9b3361

Ответ 1

Приведенное ниже объяснение должно объяснить разницу между методами driver.close и driver.quit в WebDriver. Надеюсь, вы найдете это полезным.

driver.close и driver.quit - это два разных метода закрытия сессии браузера в Selenium WebDriver.

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

driver.close - этот метод закрывает окно браузера, на котором установлен фокус. driver.quit закрывает сеанс вебдрайвера, пока driver.close закрывает только текущее окно, в котором присутствует элемент управления селеном, но сеанс веб-драйвера еще не закрывается, если другое окно не открыто и вы вызываете driver.close, затем он также закрывает сеанс работы веб-драйвера.

driver.quit - этот метод в основном вызывает driver.dispose теперь внутренний метод, который в свою очередь закрывает все окна браузера и завершает сеанс WebDriver изящно.

driver.dispose - Как упоминалось ранее, это внутренний метод WebDriver, который был отброшен в соответствии с другим ответом - требуется проверка. Этот метод в действительности не имеет прецедента в обычном рабочем процессе тестирования, поскольку любой из предыдущих методов должен работать в большинстве случаев.

Объяснение варианта использования: вы должны использовать driver.quit всякий раз, когда хотите завершить программу. Он закроет все открытые окна браузера и завершит сеанс WebDriver. Если вы не используете driver.quit в конце программы, сеанс WebDriver не закроется должным образом и файлы не будут удалены из памяти. Это может привести к ошибкам утечки памяти.

............

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

String homeWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();

//Use Iterator to iterate over windows
Iterator<String> windowIterator =  allWindows.iterator();

//Verify next window is available
while(windowIterator.hasNext())
{
    //Store the Recruiter window id
    String childWindow = windowIterator.next();
}

//Here we will compare if parent window is not equal to child window 
if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

Теперь здесь вам нужно изменить или добавить условие в соответствии с вашими потребностями

if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

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

Ответ 2

Вы должны понимать разницу между driver.close() и driver.quit()

driver.close() и driver.quit() - два разных метода закрытия сеанса браузера в Selenium WebDriver. Понимание обоих из них и знание того, когда использовать этот метод, важны при выполнении теста.

driver.close() - он закрывает окно браузера, на котором находится фокус набор.

driver.quit() - Он в основном вызывает метод driver.dispose, который в свою очередь закрывает все окна браузера и завершает сеанс WebDriver грациозно.

Вы должны использовать driver.quit(), когда хотите завершить программу. Он закроет все открытое окно браузера и завершит сеанс WebDriver. Если вы не используете driver.quit в конце программы, сеанс WebDriver не будет корректно закрываться, и файлы не будут очищены от памяти. Это может привести к ошибкам утечки памяти.

В вашем случае вы должны использовать driver.close(), который закроет текущее окно и сохранит драйвер.

Просто добавьте - если открыто только окно браузера, и вы используете driver.close(), он прекратит сеанс webdriver. Webdriver не будет оставаться активным.

Ответ 3

Этот код закрывает все открытые окна, а затем возвращает управление в главное окно.

public static void switchTab() {            
    try {
        Set<String> windows = webDriver.getWindowHandles();
        Iterator<String> iter = windows.iterator();
        String[] winNames=new String[windows.size()];
        int i=0;
        while (iter.hasNext()) {
            winNames[i]=iter.next();
            i++;
        }

        if(winNames.length > 1) {
            for(i = winNames.length; i > 1; i--) {
                webDriver.switchTo().window(winNames[i - 1]);
                webDriver.close();
            }
        }
        webDriver.switchTo().window(winNames[0]);
    }
    catch(Exception e){         
        e.printStackTrace();
    }
}