Eil*_*idh 19 selenium web-component polyfills selenium-webdriver remotewebdriver
如果有人知道解决更大问题的替代方法,则提供上下文.
问题背景
我正率先为使用Web组件的Web应用程序开发测试自动化框架.这在Internet Explorer中进行测试时出现了问题,因为Internet Explorer本身不支持Web组件; 相反,polyfill用于提供此功能.
对此的主要反应是,Selenium的大部分将无法按预期工作.它无法像在Firefox和Chrome中那样"看到"Internet Explorer中的Shadow DOM.
另一种方法是编写一个测试框架,它提供了一种通过JavaScript访问元素的替代机制 - 这允许元素通过polyfill定位.
我们当前的实现检查WebDriver正在使用的,并使用方法的原始Selenium实现(在Chrome或Firefox的情况下),或者我们自己的替代实现(在Internet Explorer的情况下).
这意味着我们希望我们的实现尽可能接近Selenium的实现,其核心是浏览器交互级别.
问题
我试图复制的功能Actions.click(WebElement onElement)(源),以简化形式(不继的生成器设计模式Actions类,并使得假设该点击是与鼠标左键并没有其他按键(Ctrl,Shift,Alt)正在举行下).
我想找到处理点击的核心代码(特别是在Chrome,Firefox和Internet Explorer中),所以我可以尽可能地复制它,但是我发现自己迷失在类和接口的深层. ..
创建一个新的ClickAction(源)(以后执行).执行此操作包括对Mouse接口实例(源)进行"click()"调用... aaaa并且我丢失了.我从生成的JavaDoc中看到,它是由EventFiringMouse(源代码)或HtmlUnitMouse(源代码)实现的,但我不确定将实现哪一个.我做了一个假设(没什么基础)HtmlUnitMouse可以使用,这让我进一步深入兔子洞看Gargoyle Software的HTMLUnit代码 ......
简而言之,我完全迷失了.
任何指导将不胜感激:)
研究
RemoteWebDriver(源)由子类ChromeDriver,FirefoxDriver和InternetExplorerDriver.要点
Chrome、Firefox 和 Internet Explorer 的驱动程序都是RemoteWebDrivers.
这意味着 Selenium 执行的任何操作都会WebDriver通过HttpRequest.
一旦浏览器收到请求,它将作为“本机事件”或综合执行操作。浏览器如何执行操作取决于浏览器的功能(以及可能的标志选项)。
“本机”事件是操作系统级别的事件。
综合执行的操作是使用 JavaScript 执行的。使用“自动化原子”——正如人们从“原子”推断的那样,它们是执行低级操作的小而简单的函数。
参考
RemoteWebDriver由ChromeDriver、FirefoxDriver、InternetExplorerDriver、OperaDriver和进行子类化SafariDriver。(参考)
与浏览器或 RemoteWebDriver 服务器通信的所有 WebDriver 实现都应使用通用有线协议。该有线协议使用JSON over HTTP 定义了RESTful Web 服务。(参考)
在WebDriver 中,高级用户交互是通过直接模拟JavaScript 事件(即合成事件)或让浏览器生成JavaScript 事件(即本机事件)来提供的。本机事件可以更好地模拟用户交互,而合成事件是独立于平台的 [...] 应尽可能使用本机事件。(参考)
浏览器自动化原子是旨在供 Selenium 实现使用的构建块。通过在整个代码库中使用相同的部分,而不是在多个地方重新实现所需的功能,该项目可以减少发现的错误数量,并可以简化添加新功能和驱动程序的过程。(参考)
自动化原子
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |