WebDriver 如何启动 IE 实例?

How does WebDriver launch an instance of IE?

WebDriver如何启动一个IE实例?

也就是说,IEDriverServer.exe 到底是做什么的?这个二进制文件如何实例化一个 IE 浏览器 window?

IEDriverServer 是一个独立的 HTTP 服务器,它实现了 WebDriver 的 JSON 有线协议 - WebDriver 使用该协议控制 IE。 IEDriverServer 使用在机器中注册的 COM 库来创建浏览器的实例。

https://selenium.googlecode.com/svn/wiki/JsonWireProtocol.wiki https://code.google.com/p/selenium/wiki/InternetExplorerDriverInternals#How_the_Works

首先,我认为值得定义WebDriver是什么。 在定义和提到的另一个答案中,WebDriver 实现了 API,它是独立于语言和平台的,并通过关联的有线协议驱动浏览器。我建议你阅读 this 以了解 WebDriver 的内部架构

Now what exactly does the IEDriverServer.exe do?

IEDriverServer以及其他驱动程序可以被认为是常见的WebDriver命令的解释器。

• 因此您使用 Java、C#、python 等编写了一些命令

• 您已通过 运行 Selenium 测试

开始执行这些命令

• Selenium 启动 IEDriver 服务器(以及其他驱动程序或您正在使用的任何驱动程序)并且驱动程序开始侦听空闲端口

• Selenium 命令被驱动程序拦截并通过JSon 协议传输到浏览器并驱动浏览器。 @Vinoth S 提供的答案展示了整个过程。

Secondly, How does this binary instantiate an IE browser window?

正如@Roman 所说,IEDriver 和所有其他驱动程序都知道在哪里寻找才能打开浏览器。这基本上就是注册表。如果您转到 @Roman 提到的注册表路径,您将看到与此类似的 exe 位置。在我的例子中,windows 在 D 驱动器中,但通常它在 C

当语言绑定请求新会话时,IEDriverServer.exe 调用 Windows IELaunchURL API function on a "known good" URL. Usually, this is http://localhost:[port], but can be controlled by passing specific capabilities. With the introduction of Protected Mode in IE 7, this API is the proper way to launch IE。驱动程序连接到本地主机而不是 about:blank,因为目标 URL 必须属于保护模式区域,而 about:blank 不属于。

IELaunchURL API 也是必需的,因为对于多进程 IE,简单启动 iexplore.exe 启动的进程可能不是包含要驱动的浏览器的实际进程。 IELaunchURL API returns 已启动浏览器的进程 ID,驱动程序可以使用它来定位浏览器 window 的 window 句柄 window iexplore.exe过程。一旦知道 window 句柄,驱动程序就可以使用两种技术之一(Active Accessibility 或 ShellWindows API)来获取对 IE 的引用它用于实际驱动浏览器的 COM 对象。

值得注意的是,默认情况下,驱动程序不会直接通过CreateProcess创建IE的实例,因此不需要查询注册表来定位IE的安装位置。启动浏览器。虽然驱动程序 确实 确定 IE 可执行文件的位置,并使用注册表来执行此操作,但它使用该位置以便驱动程序可以正确且明确地确定安装在上的 IE 版本系统。