从技术角度来看,Selenium如何点击网页上的元素?

时间:2015-10-30 13:50:58

标签: selenium selenium-webdriver web-component polyfills 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)source)的功能(不遵循Actions类的Builder设计模式,并假设点击是用鼠标左键,没有其他键( Ctrl Shift Alt )被按下。

我想找到处理点击的核心代码(特别是在Chrome,Firefox和Internet Explorer中),所以我可以尽可能地复制它,但是我发现自己迷失在深深的课堂中和接口......

创建新ClickActionsource)(稍后执行)。执行此操作包括对Mouse接口(source)的实例进行“click()”调用... aaaa并且我丢失了。我从generated JavaDoc看到这是由EventFiringMousesource)或HtmlUnitMousesource)实现的,但我不确定哪一个会是实现。我做了一个假设(基础很少)HtmlUnitMouse会被使用,这让我进一步沿着兔子洞看HTMLUnit code from Gargoyle Software ......

总之,我完全迷失了。

任何指导都将非常感谢:)

研究

  • 我发现我认为HTMLUnit被Chrome,Firefox和Internet Explorer使用是不正确的。文档显示RemoteWebDriversource)是ChromeDriverFirefoxDriverInternetExplorerDriver的子类。

2 个答案:

答案 0 :(得分:3)

要点

Chrome,Firefox和Internet Explorer的驱动程序均为RemoteWebDrivers

这意味着Selenium执行的所有操作都会通过WebDriver发送到浏览器(HttpRequest)。

一旦浏览器收到请求,它就会以"本机事件"执行操作。或综合的。浏览器如何执行操作取决于浏览器的功能(可能还有标记选项)。

"本机"事件是操作系统级别的事件。

使用JavaScript执行合成执行的操作。 "自动化原子"使用 - 作为一个推断来自'原子',它们是执行低级动作的小而简单的功能。

参考文献

  • RemoteWebDriverChromeDriverFirefoxDriverInternetExplorerDriverOperaDriverSafariDriver分组。 (reference

  •   

    与浏览器或RemoteWebDriver服务器通信的WebDriver的所有实现都应使用通用的有线协议。此有线协议使用RESTful web service通过HTTP定义JSON。 (reference

  •   

    在WebDriver中,高级用户交互是通过直接模拟JavaScript事件(即合成事件)或让浏览器生成JavaScript事件(即本机事件)来提供的。本机事件更好地模拟用户交互,而合成事件与平台无关[...]应尽可能使用本机事件。 (reference

  •   

    浏览器自动化原子是供Selenium实现使用的构建块。通过在整个代码库中使用相同的部分,而不是在多个位置重新实现所需的功能,项目可以减少发现的错误数量,并可以简化添加新功能和驱动程序的过程。 (reference

自动化原子

答案 1 :(得分:2)

wiki for the Selenium IE Driver表示它使用本机事件而不是JavaScript事件与浏览器进行交互。

  

由于InternetExplorerDriver仅限Windows,因此会尝试使用   所谓的" native"或OS级事件来执行鼠标和键盘   浏览器中的操作。这与使用模拟相反   用于相同操作的JavaScript事件。

除了点击使用JavaScript的click()元素外。

  

IE驱动程序使用.selected处理这一个场景   Automation Atom,它实质上设置了onChange属性   元素并模拟JavaScript中的{{1}}事件。