Selenium FirefoxDriver - WebElement.click() зависает, если окно закрывается при нажатии с помощью Geckodriver

Мета:-

  • Селен 3.3.1
  • Firefox версии 52.0.1 (32-разрядная версия)
  • Geckodriver v0.15.0 (32-разрядная версия)
  • Windows 10
  • Java v1.8_121 (32-разрядная версия)

Я подготовил два .html, чтобы воспроизвести эту проблему.

  • mainWindow.html

    <title>Main Window</title>
    <input type="submit" value ="Open Window" id="open" onclick="openWindow()">
    
    <script>
    function openWindow() 
    {
     window.open("newWindow.html", "", "width=500,height=500");
    }
    

  • newWindow.html

    <title>New Window</title>
    <input type="submit" value="Close Window" id="close" onclick="closeWindow()">
    
    <script>
    function closeWindow() 
    {
     window.close();
    }
    </script>
    

Selenium шаги для воспроизведения: -

System.setProperty("webdriver.gecko.driver", "geckodriverWin32-0.15.0.exe");

WebDriver driver = new FirefoxDriver();
driver.get("file:///mainWindow.html");
driver.manage().window().maximize();

driver.findElement(By.id("open")).click(); //This works fine

String curWindowHandle = driver.getWindowHandle();
Set<String> winHandles = driver.getWindowHandles();

for(String win : winHandles) {
    if (!curWindowHandle.toString().equals(win)) {
         driver.switchTo().window(win);
    }
}

driver.findElement(By.id("close")).click(); //This click is getting hanged in infinity loop and my test case is not responded. No next line executed after this line.

Вопрос :- Почему WebElement.click() зависает в том случае, если событие клика собирается закрыть текущее окно в firefox с помощью FirefoxDriver, в то время как на chrome с помощью ChromeDriver оно работает нормально.

Примечание:- Если я использую последнюю строку как:-

((JavascriptExecutor)driver).executeScript("arguments[0].click()", driver.findElement(By.id("close")));

После выполнения щелчка эта строка также зависает.

Пожалуйста, кто-нибудь предложит мне, как решить эту проблему?


person Saurabh Gaur    schedule 28.03.2017    source источник
comment
но где вы используете newWindow.html в своем коде селения?   -  person Kushal    schedule 28.03.2017
comment
@kushalツ он используется внутри mainWindow.html и открывает новое окно при нажатии на кнопку Open Window. Спасибо..:)   -  person Saurabh Gaur    schedule 28.03.2017
comment
@Saurabh Гаур, ты нашел какое-нибудь решение? У меня точно такая же проблема   -  person BzH    schedule 17.09.2017


Ответы (1)


Добавьте следующую строку в конце (после нажатия «закрыть»):

 driver.switchTo().window(curWindowHandle); //switching to mainWindow.htm

FF зависает, вероятно, потому, что фокус все еще находится в окне, которого больше нет.

person Kushal    schedule 28.03.2017
comment
Поскольку я говорю, что зависание означает, что щелчок больше не отвечает, тогда как выполнить следующую строку кода для переключения окна..?? ваш ответ мне не полезен .. спасибо .. :) - person Saurabh Gaur; 28.03.2017