问题 如何实例化InternetExplorerDriver的不同版本 - Selenium 2?


只是想知道如何实例化InternetExplorerDriver的不同版本。

这就是我可以创建IE驱动程序的方法:

WebDriver ieWebDriver = new InternetExplorerDriver();

但我无法区分IE6,IE7,IE8和IE9。

干杯,


6862
2018-04-19 02:03


起源



答案:


Windows仅支持安装单个IE版本。虽然有一些黑客可以运行多个版本,但我很确定你不会让他们使用WebDriver(虽然我很想被证明是错误的)。

在您的考虑中,我可能会为您要测试的每个版本设置一个Windows VM,并使用RemoteWebDriver与它们进行通信。


3
2018-04-19 13:37



是的我计划有多个具有不同IE安装的VM。以编程方式如何使用RemoteWebDriver调用不同的IE版本? - sebarmeli
您的代码需要知道哪个服务器具有哪个IE版本,然后使用正确的URL实例化RemoteWebDriver。 - jarib
Modern.IE网站允许您下载安装了各种版本IE的VM映像 modern.ie/en-us/virtualization-tools#downloads - Karel Frajták


答案:


Windows仅支持安装单个IE版本。虽然有一些黑客可以运行多个版本,但我很确定你不会让他们使用WebDriver(虽然我很想被证明是错误的)。

在您的考虑中,我可能会为您要测试的每个版本设置一个Windows VM,并使用RemoteWebDriver与它们进行通信。


3
2018-04-19 13:37



是的我计划有多个具有不同IE安装的VM。以编程方式如何使用RemoteWebDriver调用不同的IE版本? - sebarmeli
您的代码需要知道哪个服务器具有哪个IE版本,然后使用正确的URL实例化RemoteWebDriver。 - jarib
Modern.IE网站允许您下载安装了各种版本IE的VM映像 modern.ie/en-us/virtualization-tools#downloads - Karel Frajták


是的你可以。 DesiredCapabilities有一个可以使用的公共方法:

this.SetCapability(CapabilityType.BrowserName, "internet explorer");
this.SetCapability(CapabilityType.Version, "8");
this.SetCapability(CapabilityType.Platform, "WINDOWS");

我编写了扩展方法,以便通过此调用更容易实例化任何版本:

DesiredCapabilities internetExplorer8 =
                          DesiredCapabilities.InternetExplorer().SetVersion("8");
IWebDriver webDriver = new RemoteWebDriver(seleniumHubUrl, internetExplorer8);

如果您使用RemoteWebDriver并且设置了具有多个节点的Selenium2网格/集线器,例如,这是非常有意义的。多个虚拟机,每个虚拟机具有不同版本的Internet Explorer,每个虚拟机都是连接到集线器的节点。

和扩展:

public static class DesiredCapabilitiesExtension
{
    public static DesiredCapabilities SetBrowserName(this DesiredCapabilities desiredCapabilities, string browserName)
    {
        // make sure the browser name is lowercase
        desiredCapabilities.SetCapability(CapabilityType.BrowserName, browserName.ToLowerInvariant());
        return desiredCapabilities;
    }

    public static DesiredCapabilities SetVersion(this DesiredCapabilities desiredCapabilities, string version)
    {
        desiredCapabilities.SetCapability(CapabilityType.Version, version);
        return desiredCapabilities;
    }

    public static DesiredCapabilities SetPlatform(this DesiredCapabilities desiredCapabilities, string platform)
    {
        // make sure the platform is case sensitive, uppercase to make it work
        desiredCapabilities.SetCapability(CapabilityType.Platform, platform.ToUpperInvariant());
        return desiredCapabilities;
    }
}

10
2017-12-15 17:32



这似乎不起作用。当我尝试设置版本时,网格无法找到任何版本的IE。虽然它使用版本号转发会话,但它无法找到具有正确版本的浏览器,并引发一个异常,即它无法找到具有这些功能的浏览器。 - 0o'-Varun-'o0


要实例化不同的版本,可以使用capability.setVersion将版本设置为所需的版本号。同时,在启动节点时,需要在命令行中添加以下参数:

-browser“browserName = internet explorer,maxInstances = 5,platform = WINDOWS,version = 8”

要在同一节点上支持多个版本,可以多次使用“-browser”。


1
2017-12-10 10:13



在节点启动时设置浏览器标志至关重要,否则网格将找不到所需的版本。谢谢! - Samuel


但是,最新的IE支持“浏览器模式” - 只需按F12并选择浏览模式。 AFAIK它运行得很好 - 至少与IE8和IE7相比。 我很好奇它是否可以通过javascript访问并在Selenium中自动更改?


0
2018-04-27 12:43



简单的答案是:不,你不能用Selenium模拟F12。 “浏览器模式”不太可靠。看到 stackoverflow.com/a/11418046/1080590 - Miro