IE11でSeleniumを使用してWebページを自動化しようとしています。保護モードの設定を同じレベルに設定しましたが、ズームレベルは100%です。テストの実行中にWebサイトが開きますが、直後に例外が発生します。以下は使用されるコードです。
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");
そして、例外スタックトレース
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)
これを解決する方法に関する提案。
まず第一に、使用しないでください
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
既に保護モード設定を設定しているため。表示されている問題については、IE11でテストを実行するための前提条件として追加されているレジストリ設定が欠落していることが原因です。
https://github.com/SeleniumHQ/Selenium/wiki/InternetExplorerDriver#required-configuration
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サブキーが存在する場合と存在しない場合があり、存在しない場合は作成する必要があることに注意してください。
重要:このキー内で、iexplore.exe
という名前のDWORD
値を値0で作成します。
@David Kempが提案する解決策は、11のウィンドウ10-64 bitでは機能しないことです。上記の手順に従ってレジストリキー_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:944 )を開いた後、driver.navigate().to("javascript:document.getElementById('overridelink').click()");
throwing NoSuchWindowException を実行できません。
ただし、同じは11のWindows 7-64ビットで正常に動作し、スクリプトを実行できます。
勝利10で11を機能させるための回避策は、initialBrowserUrl機能をhttps: // my-page:944以下のように
_capabilities.setCapability("initialBrowserUrl", "https://my-page:9443");
_
しかし、IE11/Windows 10ではなぜ違うのかまだ混乱していますか?
「インターネットオプション」の「信頼済みサイト」のリストにAUTのドメインを追加しました。問題を解決しました。
現在のページからいくつかのアクション/イベントの次のページに移動し、Seleniumドライバがウィンドウを認識しない場合も、以下のソリューションが機能します:-
64ビットWindowsインストールの場合、キーは次のとおりです。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
この中に、値が0のiexplore.exeという名前のDWORD値を作成します。
起動したブラウザにフォーカスが置かれていると、例外が発生することがわかりました。 Webdriverを起動したらすぐに他のウィンドウを開きます。たとえば、スクリプトがIE Driverを起動したらすぐにEclipseを開くことができます。スクリプトの実行が開始されたら、IE Driver ..を開いてスクリプトで処理できます。次のコードを追加します。
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();
IEオプション->セキュリティタブ->「保護モードを有効にする」のチェックを外してください。