19

I'm trying to run tests against IE8 but I've encountered a strange issue:

  1. When creating the webdriver instance (driver = Selenium::WebDriver.for :ie), IE starts up and an exception is thrown by WebDriver:

    "Unexpected error launching Internet Explorer. Browser zoom level was set to 0%"

  2. IE seems to show a failure to connect to the IE Driver Server but if I refresh the browser manually, it connects just fine.

    I have checked online and only two other people seem to have reported this. One possible solution was to ensure that all zones have the same "protected mode" settings, which they do.

    My environment is Windows 7 and IE8 with IE Driver Server v2.25.3 and I'm using the Ruby bindings.

Any ideas?

4

13 に答える 13

24

WebDriver User Group のこのスレッドでの Jim Evans (Selenium 開発者の 1 人) による回答によると、以下のコードで問題が解決するはずです。

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(caps);
于 2012-08-21T12:58:35.337 に答える
18

質問は特定の言語でタグ付けされていないため、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);
于 2014-09-10T07:18:15.510 に答える
11

ブラウザのズームを 100% に調整します すばやく修正するには、ブラウザのズームを 100% に調整します。

于 2015-11-04T11:55:50.010 に答える
8

最も堅牢なアプローチ

Internet Explorer と Selenium Webdriver を使い始める前に、次の 2 つの重要なルールを考慮してください。

  1. ズーム レベル: デフォルト (100%) に設定する必要があります。
  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...

お役に立てれば。さらに情報が必要な場合はお知らせください。

于 2016-11-25T09:49:28.927 に答える
7

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);
            }
        }
    }
}

さまざまなシステム DPI 設定でのレジストリの ZoomFactor 値と IE ズームを 100% に設定して比較した値を思いつきました。新しい Windows バージョンには 3 つ以上の DPI 設定があるため、それらが必要な場合はクラスを拡張する必要があります。

これを変更して、必要なズームレベルを計算することもできますが、それは私には関係ありませんでした.

InternetExplorerHelper.SetZoom100();IEを開く前とInternetExplorerHelper.ResetZoom()閉じた後に呼び出すだけです。

于 2016-09-30T06:17:53.403 に答える
2

これは基本的に、ブラウザが 100% 以外のズーム レベルに設定されている場合に発生します (Ctrl キーを押しながら Web ページ上でマウスをスクロールすると発生します)。上記のコードを指定して Selenium がブラウザーのズーム レベルを無視するようにすることで、これを修正できます。または、単にブラウザーを開いて、設定に移動するか、ショートカット Ctrl+0 を使用してズーム レベルを 100% にリセットすることもできます (これは、 IE11 とクロム)

于 2016-04-13T21:19:39.307 に答える
2

投稿をありがとう、これは本当にうまくいきました。ズーム レベルの例外を修正するには:

InternetExplorerOptions options = new InternetExplorerOptions {  IgnoreZoomLevel= true };
driver = new InternetExplorerDriver(@"C:\seleniumreferences\IEDriverServer32", options);
于 2016-12-08T20:13:36.907 に答える
0
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);
于 2015-07-20T19:50:19.470 に答える
0

Tomas Lycken's answer が言ったように、言語が指定されていないため、 Pythonでソリューションを共有します。

capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities['ignoreZoomSetting'] = True
driver = webdriver.Ie(capabilities=capabilities)
于 2016-11-28T11:02:28.693 に答える
0

IgnoreZoomLevel プロパティを true に設定し、それを InternetExplorerOptions としてドライバーに渡します。

InternetExplorerOptions options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
IWebDriver driver = new InternetExplorerDriver(IEDriverLocation,options);
于 2015-10-13T05:47:48.283 に答える