IE 特定功能

这些是 Microsoft Internet Explorer 浏览器特有的功能和特性。

自 2022 年 6 月起,Selenium 官方不再支持独立的 Internet Explorer。Internet Explorer 驱动仍然支持在“IE 兼容模式”下运行 Microsoft Edge。

特殊注意事项

IE 驱动是 Selenium 项目直接维护的唯一驱动。虽然提供了 32 位和 64 位版本的 Internet Explorer 二进制文件,但 64 位驱动存在一些已知限制。因此,建议使用 32 位驱动。

有关使用 Internet Explorer 的更多信息,请访问IE 驱动服务器页面

选项

使用基本定义的选项在 Internet Explorer 兼容模式下启动 Microsoft Edge 浏览器如下所示

        InternetExplorerOptions options = new InternetExplorerOptions();
        options.attachToEdgeChrome();
        options.withEdgeExecutablePath(getEdgeLocation());
        driver = new InternetExplorerDriver(options);
    options = webdriver.IeOptions()
    options.attach_to_edge_chrome = True
    options.edge_executable_path = edge_bin
    driver = webdriver.Ie(options=options)
            var options = new InternetExplorerOptions();
            options.AttachToEdgeChrome = true;
            options.EdgeExecutablePath = GetEdgeLocation();
            _driver = new InternetExplorerDriver(options);
      options = Selenium::WebDriver::IE::Options.new
      options.attach_to_edge_chrome = true
      options.edge_executable_path = edge_location
      @driver = Selenium::WebDriver.for :ie, options: options

自 Internet Explorer 驱动 v4.5.0 起

  • 如果系统上没有 IE(Windows 11 中的默认情况),则不需要使用上述两个参数。IE 驱动将使用 Edge 并自动定位它。
  • 如果系统上同时存在 IE 和 Edge,您只需设置附加到 Edge,IE 驱动将自动在您的系统上定位 Edge。

因此,如果系统上没有 IE,您只需要

移动代码

        InternetExplorerOptions options = new InternetExplorerOptions();
        driver = new InternetExplorerDriver(options);
    options = webdriver.IeOptions()
    driver = webdriver.Ie(options=options)
            var options = new InternetExplorerOptions();
            _driver = new InternetExplorerDriver(options);
      options = Selenium::WebDriver::Options.ie
      @driver = Selenium::WebDriver.for :ie, options: options
let driver = await new Builder()
.forBrowser('internet explorer')
.setIEOptions(options)
.build();
val options = InternetExplorerOptions()
val driver = InternetExplorerDriver(options)

以下是一些具有不同功能的常见用例

fileUploadDialogTimeout

在某些环境中,Internet Explorer 在打开文件上传对话框时可能会超时。IEDriver 的默认超时时间为 1000 毫秒,但您可以使用 fileUploadDialogTimeout 功能增加超时时间。

移动代码

InternetExplorerOptions options = new InternetExplorerOptions();
options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
WebDriver driver = new RemoteWebDriver(options);
  
    options = webdriver.IeOptions()
    options.file_upload_timeout = 2000
var options = new InternetExplorerOptions();
options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
var driver = new RemoteWebDriver(options);
  
      @options.file_upload_dialog_timeout = 2000
const ie = require('selenium-webdriver/ie');
let options = new ie.Options().fileUploadDialogTimeout(2000);
let driver = await Builder()
          .setIeOptions(options)
          .build(); 
  
val options = InternetExplorerOptions()
options.waitForUploadDialogUpTo(Duration.ofSeconds(2))
val driver = RemoteWebDriver(options)
  

ensureCleanSession

当设置为 true 时,此功能会清除所有正在运行的 InternetExplorer 实例的缓存、浏览器历史记录和 Cookies,包括手动或由驱动程序启动的实例。默认情况下,它设置为 false

使用此功能会导致启动浏览器时性能下降,因为驱动程序将等待缓存清除后才启动 IE 浏览器。

此功能接受布尔值作为参数。

移动代码

InternetExplorerOptions options = new InternetExplorerOptions();
options.destructivelyEnsureCleanSession();
WebDriver driver = new RemoteWebDriver(options);
  
    options = webdriver.IeOptions()
    options.ensure_clean_session = True
var options = new InternetExplorerOptions();
options.EnsureCleanSession = true;
var driver = new RemoteWebDriver(options);
  
      @options.ensure_clean_session = true
const ie = require('selenium-webdriver/ie');
let options = new ie.Options().ensureCleanSession(true);
let driver = await Builder()
          .setIeOptions(options)
          .build(); 
  
val options = InternetExplorerOptions()
options.destructivelyEnsureCleanSession()
val driver = RemoteWebDriver(options)
  

ignoreZoomSetting

InternetExplorer 驱动程序期望浏览器缩放级别为 100%,否则驱动程序将抛出异常。可以通过将 ignoreZoomSetting 设置为 true 来禁用此默认行为。

此功能接受布尔值作为参数。

移动代码

InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings();
WebDriver driver = new RemoteWebDriver(options);
  
    options = webdriver.IeOptions()
    options.ignore_zoom_level = True
var options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
var driver = new RemoteWebDriver(options);
  
      @options.ignore_zoom_level = true
const ie = require('selenium-webdriver/ie');
let options = new ie.Options().ignoreZoomSetting(true);
let driver = await Builder()
          .setIeOptions(options)
          .build(); 
  
val options = InternetExplorerOptions()
options.ignoreZoomSettings()
val driver = RemoteWebDriver(options)
  

ignoreProtectedModeSettings

是否在启动新的 IE 会话时跳过保护模式检查。

如果未设置,并且所有区域的保护模式设置不相同,则驱动程序将抛出异常。

如果功能设置为 true,则测试可能会变得不稳定、无响应或浏览器可能挂起。但是,这仍然是第二好的选择,第一选择始终是手动实际设置每个区域的保护模式设置。如果用户正在使用此属性,则只会给予“尽力而为”的支持。

此功能接受布尔值作为参数。

移动代码

InternetExplorerOptions options = new InternetExplorerOptions();
options.introduceFlakinessByIgnoringSecurityDomains();
WebDriver driver = new RemoteWebDriver(options);
  
    options = webdriver.IeOptions()
    options.ignore_protected_mode_settings = True
var options = new InternetExplorerOptions();
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
var driver = new RemoteWebDriver(options);
  
      @options.ignore_protected_mode_settings = true
const ie = require('selenium-webdriver/ie');
let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
let driver = await Builder()
          .setIeOptions(options)
          .build(); 
  
val options = InternetExplorerOptions()
options.introduceFlakinessByIgnoringSecurityDomains()
val driver = RemoteWebDriver(options)
  

silent

当设置为 true 时,此功能会禁止 IEDriverServer 的诊断输出。

此功能接受布尔值作为参数。

移动代码

InternetExplorerOptions options = new InternetExplorerOptions();
options.setCapability("silent", true);
WebDriver driver = new InternetExplorerDriver(options);
  
    service = webdriver.IeService(service_args=["--silent"])
    driver = webdriver.Ie(service=service)
InternetExplorerOptions options = new InternetExplorerOptions();
options.AddAdditionalInternetExplorerOption("silent", true);
IWebDriver driver = new InternetExplorerDriver(options);
  
      @options.silent = true
const {Builder,By, Capabilities} = require('selenium-webdriver');
let caps = Capabilities.ie();
caps.set('silent', true);

(async function example() {
    let driver = await new Builder()
        .forBrowser('internet explorer')
        .withCapabilities(caps)
        .build();
    try {
        await driver.get('http://www.google.com/ncr');
    }
    finally {
        await driver.quit();
    }
})();
  
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions

fun main() {
    val options = InternetExplorerOptions()
    options.setCapability("silent", true)
    val driver = InternetExplorerDriver(options)
    try {
        driver.get("https://google.com/ncr")
        val caps = driver.getCapabilities()
        println(caps)
    } finally {
        driver.quit()
    }
}
  

命令行选项

Internet Explorer 包括几个命令行选项,使您能够排除故障并配置浏览器。

以下描述了一些受支持的命令行选项

  • -private:用于在私有浏览模式下启动 IE。这适用于 IE 8 及更高版本。

  • -k:以 kiosk 模式启动 Internet Explorer。浏览器将在最大化的窗口中打开,该窗口不显示地址栏、导航按钮或状态栏。

  • -extoff:在无加载项模式下启动 IE。此选项专门用于排除浏览器加载项的问题。适用于 IE 7 及更高版本。

注意:必须启用 forceCreateProcessApi 才能使命令行参数起作用。

移动代码

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;

public class ieTest {
    public static void main(String[] args) {
        InternetExplorerOptions options = new InternetExplorerOptions();
        options.useCreateProcessApiToLaunchIe();
        options.addCommandSwitches("-k");
        InternetExplorerDriver driver = new InternetExplorerDriver(options);
        try {
            driver.get("https://google.com/ncr");
            Capabilities caps = driver.getCapabilities();
            System.out.println(caps);
        } finally {
            driver.quit();
        }
    }
}
  
    options = webdriver.IeOptions()
    options.add_argument("-private")

    driver = webdriver.Ie(options=options)
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

namespace ieTest {
 class Program {
  static void Main(string[] args) {
   InternetExplorerOptions options = new InternetExplorerOptions();
   options.ForceCreateProcessApi = true;
   options.BrowserCommandLineArguments = "-k";
   IWebDriver driver = new InternetExplorerDriver(options);
   driver.Url = "https://google.com/ncr";
  }
 }
}
  
      @options.add_argument('-k')
const ie = require('selenium-webdriver/ie');
let options = new ie.Options();
options.addBrowserCommandSwitches('-k');
options.addBrowserCommandSwitches('-private');
options.forceCreateProcessApi(true);

driver = await env.builder()
          .setIeOptions(options)
          .build();
  
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions

fun main() {
    val options = InternetExplorerOptions()
    options.useCreateProcessApiToLaunchIe()
    options.addCommandSwitches("-k")
    val driver = InternetExplorerDriver(options)
    try {
        driver.get("https://google.com/ncr")
        val caps = driver.getCapabilities()
        println(caps)
    } finally {
        driver.quit()
    }
}
  

forceCreateProcessApi

强制使用 CreateProcess API 启动 Internet Explorer。默认值为 false。

对于 IE 8 及更高版本,此选项要求将“TabProcGrowth”注册表值设置为 0。

移动代码

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;

public class ieTest {
    public static void main(String[] args) {
        InternetExplorerOptions options = new InternetExplorerOptions();
        options.useCreateProcessApiToLaunchIe();
        InternetExplorerDriver driver = new InternetExplorerDriver(options);
        try {
            driver.get("https://google.com/ncr");
            Capabilities caps = driver.getCapabilities();
            System.out.println(caps);
        } finally {
            driver.quit();
        }
    }
}
  
    options = webdriver.IeOptions()
    options.force_create_process_api = True

    driver = webdriver.Ie(options=options)
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

namespace ieTest {
 class Program {
  static void Main(string[] args) {
   InternetExplorerOptions options = new InternetExplorerOptions();
   options.ForceCreateProcessApi = true;
   IWebDriver driver = new InternetExplorerDriver(options);
   driver.Url = "https://google.com/ncr";
  }
 }
}
  
      @options.force_create_process_api = true
const ie = require('selenium-webdriver/ie');
let options = new ie.Options();
options.forceCreateProcessApi(true);

driver = await env.builder()
          .setIeOptions(options)
          .build();
  
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions

fun main() {
    val options = InternetExplorerOptions()
    options.useCreateProcessApiToLaunchIe()
    val driver = InternetExplorerDriver(options)
    try {
        driver.get("https://google.com/ncr")
        val caps = driver.getCapabilities()
        println(caps)
    } finally {
        driver.quit()
    }
}
  

服务

所有浏览器通用的服务设置在服务页面上描述。

日志输出

获取驱动程序日志有助于调试各种问题。Service 类允许您定向日志的去向。除非用户将其定向到某个位置,否则日志输出将被忽略。

文件输出

要更改日志输出以保存到特定文件

Selenium v4.10

                .withLogFile(getLogLocation())

注意:Java 还允许通过系统属性设置文件输出
属性键:InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY
属性值:表示日志文件路径的字符串

    service = webdriver.IeService(log_output=log_path, log_level="INFO")

    driver = webdriver.Ie(service=service)

控制台输出

要更改日志输出以在控制台中显示为 STDOUT

Selenium v4.10

                .withLogOutput(System.out)

注意:Java 还允许通过系统属性设置控制台输出;
属性键:InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY
属性值:DriverService.LOG_STDOUTDriverService.LOG_STDERR

Selenium v4.11

    service = webdriver.IeService(log_output=subprocess.STDOUT)

    driver = webdriver.Ie(service=service)

日志级别

有 6 个可用的日志级别:FATALERRORWARNINFODEBUGTRACE。如果指定了日志输出,则默认级别为 FATAL

                .withLogLevel(InternetExplorerDriverLogLevel.WARN)

注意:Java 还允许通过系统属性设置日志级别
属性键:InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY
属性值:InternetExplorerDriverLogLevel.DEBUG.toString() 枚举的字符串表示形式

    service = webdriver.IeService(log_output=log_path, log_level="WARN")

    driver = webdriver.Ie(service=service)

Selenium v4.10

      service.args << '-log-level=WARN'

支持文件路径

                .withExtractPath(getTempDirectory())
**注意**:Java 还允许通过系统属性设置日志级别:\ 属性键:`InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\ 属性值:表示支持文件目录路径的字符串

Selenium v4.11

    service = webdriver.IeService(service_args=["–extract-path=" + temp_dir])

    driver = webdriver.Ie(service=service)

Selenium v4.8

      service.args << "–extract-path=#{root_directory}"
上次修改时间 2024 年 12 月 20 日:[py] fix ie code line (#2107) (add39da6446)