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

Selenium - исключение NoSuchWindowException в IE 11

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

   File file = new File("C:\\Users\\Desktop\\IEDriverServer.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)

Любые предложения по устранению этого.

4b9b3361

Ответ 1

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

capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);

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

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

Ответ 2

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

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

Для 32-разрядных установок Windows ключ, который вы должны изучить в редактор реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.

Для 64-разрядных установок Windows ключ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.

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

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

Ответ 3

Решение, предложенное @David Kemp, не работает для 11 окон 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

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

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

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

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

Ответ 4

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

Для 64-разрядных установок Windows ключ:

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

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

Ответ 5

Я обнаружил, что если запущенный браузер будет находиться в фокусе, вы получите это исключение. Как только вы запустите webdriver, откройте любое другое окно, например, вы можете открыть eclipse, как только script запустит IE-драйвер. запускается выполнение script, а затем вы можете открыть 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();

Ответ 6

Добавлен домен AUT в список "Надежные сайты", например, в "Свойствах Интернета". Решила проблему.

Ответ 7

Параметры IE → вкладка безопасности → Снимите флажок "Включить защищенный режим".

Ответ 8

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

            ieCapabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL,false);

Ответ 9

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