IE11 で動作しないとき
インターネットオプションの保護モード有効や拡大率100%、
レジストリ FEATURE_BFCACHE
の設定をしても動作しない状況になりました。
具体的には IE11 が立ち上がり自動入力はできるものの element.click()
が効かないという事象です。
以下のコードで動作確認できました。(2018年11月)
-
Windows 10 Pro (64 bit)
-
IEDriverServer.exe (32 bit)
public static void useIE11() {
Configuration.browser = WebDriverRunner.INTERNET_EXPLORER;
System.setProperty("webdriver.ie.driver", "C:/path/to/webdrivers/IEDriverServer.exe"); // 32bit
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("nativeEvents", false);
dc.setCapability("unexpectedAlertBehaviour", "accept");
dc.setCapability("ignoreProtectedModeSettings", true);
dc.setCapability("disable-popup-blocking", true);
dc.setCapability("enablePersistentHover", true);
InternetExplorerOptions opts = new InternetExplorerOptions();
opts.merge( dc );
InternetExplorerDriver driver = new InternetExplorer( opts );
WebDriverRunner.setWebDriver( driver );
}
設定
// ブラウザウィンドウのサイズ
Configuration.browserSize = "1280x1024";
// open() を呼んだときのベースURL
Configuration.baseUrl = "http://localhost:8080";
// 自動操作の続行待ちタイムアウト 30秒
Configuration.timeout = 30000;
// テストが終了後もブラウザを開いたままにする
Configuration.holdBrowserOpen = true;
// スクリーンショット等の出力先
Configuration.reportsFolder = "path/to/folder";
// テストが失敗したときにレポートを出力しない
Configuration.savePageSource = false;
ウィンドウ
最後に開いたウィンドウにスイッチする
// newly opened window
for (String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
}
タイトルを指定してウィンドウをスイッチする
public class Utility {
public static WebDriver getHandleToWindow(String title) {
WebDriver popup = null;
Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
System.err.println("No of windows : " + windowIterator.size());
for (String s : windowIterator) {
String windowHandle = s;
popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
System.out.println("Window Title : " + popup.getTitle());
System.out.println("Window Url : " + popup.getCurrentUrl());
if (popup.getTitle().equals(title) ) {
System.out.println("Selected Window Title : " + popup.getTitle());
return popup;
}
}
System.out.println("Window Title :" + popup.getTitle());
System.out.println();
return popup;
}
}
WebDriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
articles
-
Selenide vs Selenium · codeborne/selenide Wiki · GitHub
how Selenide API is simpler and more powerful than Selenium WebDriver API.