IE8に対してテストを実行しようとしていますが、奇妙な問題が発生しました。
Webdriverインスタンス(driver = Selenium :: WebDriver.for:ie)を作成すると、IEが起動し、WebDriverによって例外がスローされます。
「Internet Explorerの起動時に予期しないエラーが発生しました。ブラウザーのズームレベルが0%に設定されました」
IEがIE Driver Serverへの接続に失敗したことを示しているようですが、ブラウザを手動で更新すると、正常に接続されます。
私はオンラインで確認しましたが、これを報告したのは他に2人だけです。考えられる解決策の1つは、すべてのゾーンが同じ「保護モード」設定を持つようにすることでした。
私の環境はIE Driver Server v2.25.3のWindows 7とIE8で、Rubyバインディングを使用しています。
何か案は?
Jim Evans(Selenium開発者の1人)が WebDriver User Groupのこのスレッド で答えたところによると、以下のコードで問題を解決できます。
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(caps);
質問は特定の言語でタグ付けされていないため、および JacekMの回答 はC#では機能しませんでした(大文字と小文字を区別すると、Java用だと思います...)。 C#に対応するソリューションをここに配置します。
var service = InternetExplorerDriverService.CreateDefaultService(@"Path\To\Driver");
// properties on the service can be used to e.g. hide the command Prompt
var options = new InternetExplorerOptions
{
IgnoreZoomLevel = true
};
var ie = new InternetExplorerDriver(service, options);
Internet ExplorerとSelenium Webdriverを使用する前に、次の2つの重要なルールを検討してください。
これを設定する方法?
単にInternet Explorerに移動し、両方のことを手動で行います。それでおしまい。秘密はありません。
コードで実行してください。
方法1:
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");
WebDriver driver= new InternetExplorerDriver(capabilities);
driver.get(baseURl);
//Identify your elements and go ahead testing...
これは明らかにエラーを表示せず、ブラウザが開きますであり、URLに移動します。
しかし、これは要素を識別しませんなので、続行できません。
どうして?エラーを単純に抑制し、IEを開いてそのURLを取得するように求めたためです。ただし、Seleniumは、ブラウザのズームが100%、つまりデフォルトの場合にのみ要素を識別します。したがって、最終的なコードは
方法2堅牢で完全な証明方法:
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");
WebDriver driver= new InternetExplorerDriver(capabilities);
driver.get(baseURl);
driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL,"0"));
//This is to set the zoom to default value
//Identify your elements and go ahead testing...
お役に立てれば。さらに情報が必要な場合はお知らせください。
IgnoreZoomLevelプロパティを設定すると、ブラウザーをエラーなしで開くことができますが、テストでは100%以外のズームレベルの要素は見つかりません。
システムのDPI設定によっては、Ctrl + 0を送信しても必ずしも期待どおりの結果が得られるとは限りません。中(120 dpi)または大(144 dpi)(Windows 7設定)を選択した場合、Ctrl + 0はズームを125%または150%に設定します。
私が見つけた回避策は、IEを開く前にレジストリで設定を編集して、DPI設定に従ってズームレベルを設定することです。すべてがHKEY_CURRENT_USERの下にあるため、管理者権限は必要ありません。
これは私が思いついた小さなヘルパークラスです。 (C#)
_using Microsoft.Win32;
namespace WebAutomation.Helper
{
public static class InternetExplorerHelper
{
private static int m_PreviousZoomFactor = 0;
public static void SetZoom100()
{
// Get DPI setting.
RegistryKey dpiRegistryKey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics");
int dpi = (int)dpiRegistryKey.GetValue("AppliedDPI");
// 96 DPI / Smaller / 100%
int zoomFactor100Percent = 100000;
switch (dpi)
{
case 120: // Medium / 125%
zoomFactor100Percent = 80000;
break;
case 144: // Larger / 150%
zoomFactor100Percent = 66667;
break;
}
// Get IE zoom.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
int currentZoomFactor = (int)zoomRegistryKey.GetValue("ZoomFactor");
if (currentZoomFactor != zoomFactor100Percent)
{
// Set IE zoom and remember the previous value.
zoomRegistryKey.SetValue("ZoomFactor", zoomFactor100Percent, RegistryValueKind.DWord);
m_PreviousZoomFactor = currentZoomFactor;
}
}
public static void ResetZoom()
{
if (m_PreviousZoomFactor > 0)
{
// Reapply the previous value.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
zoomRegistryKey.SetValue("ZoomFactor", m_PreviousZoomFactor, RegistryValueKind.DWord);
}
}
}
}
_
IEズームを100%に設定して、さまざまなシステムDPI設定でレジストリのZoomFactor値を比較した値を考え出しました。新しいWindowsバージョンには3つ以上のDPI設定があるため、必要な場合はクラスを拡張します。
これを変更して、必要なズームレベルを計算することもできますが、それは私には関係がありませんでした。
IE=を開く前にInternetExplorerHelper.SetZoom100();
を呼び出し、閉じた後にInternetExplorerHelper.ResetZoom()
を呼び出すだけです。
InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings() ;
driver = new RemoteWebDriver(new URL("http://localhost:8888/wd/hub"),options);
これは基本的に、ブラウザーが100%以外のズームレベルに設定されている場合に発生します(Ctrlキーを押しながらWebページでマウスをスクロールすると発生します)。上記のコードを指定してSeleniumにブラウザのズームレベルを無視させるか、設定に移動するかショートカットCtrl + 0を使用してブラウザを開き、ズームレベルを100%にリセットすることで、これを修正できます(これはIE11およびChrome)
投稿をありがとう、これは本当に私のために働いた。ズームレベルの例外を修正するには:
InternetExplorerOptions options = new InternetExplorerOptions { IgnoreZoomLevel= true };
driver = new InternetExplorerDriver(@"C:\seleniumreferences\IEDriverServer32", options);
または、[Internet Explorerオプション]> [詳細設定]に移動します[新しいウィンドウとタブのズームレベルをリセットする]チェックボックスをオンにします。
リンクをクリックして画像を表示---> Internet Explorerオプション>詳細設定
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);
IgnoreZoomLevelプロパティをtrueに設定し、InternetExplorerOptionsとしてドライバーに渡します。
InternetExplorerOptions options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
IWebDriver driver = new InternetExplorerDriver(IEDriverLocation,options);
Javaを使用した作業コード
InternetExplorerOptions capabilities= new InternetExplorerOptions();
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
System.setProperty("webdriver.ie.driver", Constant.drivers + "\\IEDriverServer.exe");
driver = new InternetExplorerDriver(capabilities);
driver.manage().window().maximize();
Tomas Lyckenの回答 が言ったように、言語は指定されていないため、Pythonで解決策を共有します。
capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities['ignoreZoomSetting'] = True
driver = webdriver.Ie(capabilities=capabilities)