J'essaie d'automatiser une page Web en utilisant Selenium dans IE11. J'ai défini les paramètres du mode protégé au même niveau et le niveau de zoom est de 100%. Lors de l'exécution du test, il ouvre le site Web, mais donne l'exception juste après. Voici le code utilisé.
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");
Et le stacktrace d'exception
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)
Toutes les suggestions sur la façon de résoudre ce problème.
Tout d'abord, n'utilisez pas
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
car vous avez déjà défini les paramètres du mode protégé. Pour le problème que vous voyez, cela devrait être dû aux paramètres de registre manquants qui sont ajoutés comme condition préalable à l'exécution des tests dans IE11:
https://github.com/SeleniumHQ/Selenium/wiki/InternetExplorerDriver#required-configuration
J'utilise IE 11 - machine Windows 64 bits. Ce point a fonctionné pour moi.
Pour IE 11 uniquement, vous devrez définir une entrée de registre sur l'ordinateur cible afin que le pilote puisse maintenir une connexion à l'instance d'Internet Explorer qu'il crée.
Pour les installations Windows 32 bits, la clé que vous devez examiner dans l'éditeur de registre est HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.
Pour les installations Windows 64 bits, la clé est HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.
Veuillez noter que la sous-clé FEATURE_BFCACHE peut ou non être présente, et doit être créée si elle n'est pas présente.
Important: Dans cette clé, créez une valeur DWORD
nommée iexplore.exe
avec la valeur 0.
La solution suggérée par @David Kemp est ne fonctionne pas pour ie 11 des fenêtres 10 - 64 bits . J'ai ajouté la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
Selon les étapes mentionnées pour IE 11 uniquement après https://github.com/SeleniumHQ/Selenium/wiki/InternetExplorerDriver # required-configuration mais après avoir ouvert la page du certificat https (url https: // ma-page: 944 ) il est incapable d'exécuter driver.navigate().to("javascript:document.getElementById('overridelink').click()");
throwing NoSuchWindowException
Cependant le même fonctionne très bien pour ie 11 de windows 7-64 bits et capable d'exécuter les scripts.
La solution pour que ie 11 fonctionne pour win 10 consiste à définir les capacités initiales deBrowserUrl sur https: // ma page: 944 comme ci-dessous
capabilities.setCapability("initialBrowserUrl", "https://my-page:9443");
mais je ne comprends toujours pas pourquoi pour ie11/windows 10 c'est différent?
Ajout du domaine AUT à la liste des "sites de confiance", c'est-à-dire dans les "Options Internet". Résolu le problème.
La solution ci-dessous fonctionne également si à partir de la page actuelle, vous naviguez sur la page suivante sur une action/un événement et que le pilote Selenium ne reconnaît pas la fenêtre: -
Pour les installations Windows 64 bits, la clé est:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
À l'intérieur de cela, créez une valeur DWORD nommée iexplore.exe avec la valeur 0.
J'ai trouvé que, si le navigateur lancé reste concentré, vous obtiendrez cette exception. Dès que vous lancez le pilote Web, ouvrez n'importe quelle autre fenêtre, par exemple, vous pouvez ouvrir Eclipse dès que le script lance le pilote IE. L'exécution du script démarre, puis vous pouvez ouvrir votre IE pilote .. pour le gérer via des scripts, vous ajoutez le code ci-dessous:
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();
Options IE -> onglet Sécurité -> Décochez "Activer le mode protégé" a fonctionné pour moi.