Селен-NoSuchWindowException в IE 11

Я пытаюсь автоматизировать веб-страницу с помощью selenium в IE11. Я установил настройки защищенного режима на тот же уровень, а уровень масштабирования-100%. При запуске теста он открывает веб-сайт, однако дает исключение сразу после этого. Ниже приведен используемый код.

   File file = new File("C:UsersDesktopIEDriverServer.exe");
   System.setProperty("webdriver.ie.driver", file.getAbsolutePath() );       
   DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
   capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
   true); 
   WebDriver driver = new InternetExplorerDriver(capabilities);
   driver.get("http://www.google.com");

и исключение stacktrace

Started InternetExplorerDriver server (32-bit)
2.39.0.0
Listening on port 38122
Jul 11, 2014 1:50:02 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: I/O exception (java.net.SocketException) caught when processing request: Software caused        connection abort: recv failed
Jul 11, 2014 1:50:02 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: Retrying request
Exception in thread "main" org.openqa.selenium.NoSuchWindowException: Unable to find element on   closed window (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 18 milliseconds
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:12:12'
 System info: host: 'Neeraj', ip: '10.136.180.161', os.name: 'Windows 7',  s.arch: 'amd64',      os.version: '6.1', java.version: '1.7.0_60'  Session ID: ab6edd65-8a66-41fa-be46-56fba7dbdfc9
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
 Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0,                          ignoreZoomSetting=false,                                  enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true,   unexpectedAlertBehaviour=dismiss, version=11, ie.usePerProcessProxy=false, cssSelectorsEnabled=true,   ignoreProtectedModeSettings=true, requireWindowFocus=false,  handlesAlerts=true, initialBrowserUrl=http://localhost:38122/, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}]
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
      at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
 at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
 at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:348)
 at org.openqa.selenium.By$ById.findElement(By.java:220)
 at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
 at Test1.main(Test1.java:27)

любые предложения о том, как решить эту проблему.

8 ответов


прежде всего, не используйте

capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);

Как вы уже установили параметры защищенного режима. Для проблемы, которую вы видите, это должно быть из-за отсутствующих параметров реестра, добавленных в качестве предварительного условия для запуска тестов в IE11:

https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration


Я использую т. е. 11 - 64 разрядной Windows. Этот пункт сработал для меня.

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

для 32-разрядных установок Windows ключ, который вы должны изучить в редактор реестра-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Проводник\Главная\мыши featurecontrol\FEATURE_BFCACHE.

для 64-разрядных версий Windows, ключ HKEY_LOCAL_MACHINE\программное обеспечение\Wow6432Node\Microsoft\интернет Проводник\Главная\мыши featurecontrol\FEATURE_BFCACHE.

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

важно: внутри этого ключа, создать DWORD значение имени iexplore.exe значением 0.


решение, предложенное @David Kemp, является не работает для ie 11 windows 10-64 бит . Я добавил раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet explorer\Main\FeatureControl\FEATURE_BFCACHE в соответствии с шагами, упомянутыми для IE 11 только после https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration но после открытия страницы сертификата https (url https://my-page:9443) он не может выполнить driver.navigate().to("javascript:document.getElementById('overridelink').click()"); бросать NoSuchWindowException

тот же отлично работает для ie 11 из Windows 7-64 бит и возможность выполнения скриптов .

работа вокруг, чтобы сделать ie 11 работать для win 10, установив initialBrowserUrl возможности https://my-page:9443 ниже

capabilities.setCapability("initialBrowserUrl", "https://my-page:9443");

но я все еще смущен, почему для ie11 / windows 10 это отличается ?


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

    public WebDriver driver, driver1;
    System.setProperty("webdriver.ie.driver", System.getProperty(
                    "webdriver.ie.driver", "./BrowserDrivers/IEDriverServer.exe"));
            driver = new InternetExplorerDriver(cap);
            this.driver.manage().deleteAllCookies();
            this.driver.manage().timeouts().implicitlyWait(WaitTimeConstants.WAIT_TIME_LONG, TimeUnit.SECONDS);

            this.driver.get("yourApplication.com");
            this.driver.manage().window().maximize();

public WebDriver driver, driver1;
System.setProperty("webdriver.ie.driver", System.getProperty(
                "webdriver.ie.driver", "./BrowserDrivers/IEDriverServer.exe"));
        driver1 = new InternetExplorerDriver(cap);
        this.driver1.manage().deleteAllCookies();

        this.driver1.get("http://www.google.com");
        this.driver1.manage().window().maximize();

добавлен домен AUT в список " доверенных сайтов "для т. е. в"Internet Options". Решить проблему.


ниже Решение также работает, если с текущей страницы вы переходите на следующую страницу на каком-то действии/событии и драйвер selenium не распознает окно: -

для 64-разрядных версий Windows, ключ:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet explorer\Main\FeatureControl\FEATURE_BFCACHE

внутри этого создайте значение DWORD с именем iexplore.exe со значением 0.


добавить http://localhost/ на ваши надежные сайты в IE11. Это сработало для меня, после того, как я попробовал все остальное безрезультатно.


IE Options -- > Security Tab - > снимите флажок "Включить защищенный режим" работал для меня.