WebDriver如何启动IE实例?
那就是IEDriverServer.exe到底做了什么?这个二进制文件如何实例化IE浏览器窗口?
答案 0 :(得分:2)
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
答案 1 :(得分:2)
当语言绑定请求新会话时,IEDriverServer.exe
会在"已知商品"上调用Windows IELaunchURL
API函数。 URL。通常,这是http://localhost:[port],但可以通过传递特定功能来控制。随着IE 7中保护模式的引入,this API is the proper way to launch IE。驱动程序连接到localhost而不是,例如about:blank,因为目标URL必须属于Protected Mode区域,而about:blank不属于。
还需要IELaunchURL
API,因为对于多进程IE,只需启动iexplore.exe
启动的进程可能不是包含要驱动的浏览器的实际进程。 IELaunchURL
API返回已启动浏览器的进程ID,驱动程序可以使用该进程ID来查找该iexplore.exe
进程拥有的浏览器窗口的窗口句柄。知道窗口句柄后,驱动程序可以使用两种技术之一(Active Accessibility或ShellWindows API)来获取它用于实际驱动浏览器的IE COM对象的引用。
值得注意的是,默认情况下,驱动程序不会通过CreateProcess
直接创建IE实例,因此无需查询注册表以找到IE的安装位置以便启动浏览器。虽然驱动程序 确定IE可执行文件的位置,并使用注册表执行此操作,但它使用该位置,以便驱动程序可以正确且明确地确定系统上安装的IE版本。
答案 2 :(得分:1)
首先,我认为定义WebDriver是值得的。 在定义和上面提到的其他答案中,WebDriver实现了独立于语言和平台的API,并通过相关的线路协议驱动浏览器。我建议您阅读this以了解WebDriver的内部架构
现在IEDriverServer.exe究竟做了什么?
IEDriverServer以及其他驱动程序可以被视为常见WebDriver命令的解释器。
•所以你用Java,C#,python等编写了一些命令。
•您通过运行Selenium测试
开始执行这些命令•Selenium启动IEDriver服务器(以及其他驱动程序或您正在使用的任何驱动程序)并且驱动程序开始侦听自由端口
•Selenium命令被驱动程序拦截并通过JSon协议传输到浏览器并驱动浏览器。 @Vinoth S提供的答案显示了整个过程。
其次,这个二进制文件如何实例化IE浏览器窗口?
正如@Roman所说,IEDriver和所有其他驱动程序都知道在哪里可以查找以打开浏览器。那基本上就是注册表。如果你去@Roman提到的注册表路径,你会看到类似于这个的exe位置。在我的情况下,窗口是在D驱动器,但通常是在C