如果有人知道解决更大问题的替代方法,就会提供上下文。
问题语境
我正在为使用Web组件的Web应用程序开发一个测试自动化框架。这在InternetExplorer中测试时出现了问题,因为InternetExplorer本机不支持Web组件;相反,使用了一个填充来提供此功能。
这的一个主要后果是,许多硒将不能像预期的那样起作用。它无法像在Firefox和Chrome中那样“看到”InternetExplorer中的影子DOM。
另一种方法是编写一个测试框架,它为通过JavaScript访问元素提供了一种备用机制--这允许元素通过多边形定位。
当前实现检查WebDriver
正在使用,或者使用方法的原始Selenium实现(在Chrome或Firefox中),或者使用我们自己的替代实现(在InternetExplorer中)。
这意味着我们希望我们的实现尽可能接近Selenium的实现,在其核心、浏览器交互级别上。
问题
我试图复制Actions.click(WebElement onElement)
(来源)的简化形式(不遵循Actions
类,并假设单击是用鼠标左键而不是按住其他键(Ctrl、Shift、Alt)。
我想找到处理点击做的核心代码(特别是在Chrome,Firefox和InternetExplorer中),这样我就可以尽可能地复制它,但是我发现自己迷失在了类和接口的深坑中……
新的ClickAction
(来源)被创建(稍后执行)。执行此操作包括对Mouse
接口(来源)...我迷路了。我从生成JavaDoc这是由任何一个EventFiringMouse(来源)或HtmlUnitMouse(来源),但我不确定将实施哪一个。我做了一个假设(几乎没有根据)HtmlUnitMouse
会被使用,这使我深入来自Gargoyle软件的HTMLUnit代码...
总之,我完全迷路了。
研究
RemoteWebDriver
(来源)由ChromeDriver
,FirefoxDriver
,和InternetExplorerDriver
引起发布于 2018-02-02 17:06:06
用于Selenium IE驱动程序的Wiki声明它使用本地事件而不是JavaScript事件与浏览器交互。
由于InternetExplorerDriver是Windows专用的,所以它尝试使用所谓的“原生”或OS级事件在浏览器中执行鼠标和键盘操作。这与对相同操作使用模拟JavaScript事件形成了对比。
除了点击<option>
元素,它使用JavaScript。
IE驱动程序通过使用
click()
自动化Atom,它本质上设置了.selected
属性,并模拟onChange
事件。
发布于 2018-02-02 17:54:36
要点
Chrome、Firefox和InternetExplorer的驱动程序都是RemoteWebDrivers
...
这意味着Selenium执行的任何操作都被发送到浏览器(WebDriver
),通过HttpRequest
...
一旦浏览器接收到请求,它将作为“本机事件”或综合执行该操作。浏览器执行操作的方式取决于浏览器的功能(以及潜在的标志选项)。
“原生”事件是操作系统级事件。
综合执行的操作使用JavaScript执行。“AutomationAtoms”被使用--正如从‘ATOM’中推断出来的那样,它们是执行低级操作的小而简单的函数。
参考文献
RemoteWebDriver
子类ChromeDriver
,FirefoxDriver
,InternetExplorerDriver
,OperaDriver
,和SafariDriver
(参照系)自动化原子
https://stackoverflow.com/questions/-100007311
复制相似问题