首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从技术角度来看,Selenium如何单击网页上的元素?

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

Stack Overflow用户
提问于 2018-02-02 08:16:52
回答 2查看 0关注 0票数 0

如果有人知道解决更大问题的替代方法,就会提供上下文。

问题语境

我正在为使用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代码...

总之,我完全迷路了。

研究

  • 我发现我的假设是不正确的,我认为HTMLUnit是由Chrome、Firefox和InternetExplorer使用的。文件显示RemoteWebDriver(来源)由ChromeDriverFirefoxDriver,和InternetExplorerDriver引起
EN

回答 2

Stack Overflow用户

发布于 2018-02-02 17:06:06

用于Selenium IE驱动程序的Wiki声明它使用本地事件而不是JavaScript事件与浏览器交互。

由于InternetExplorerDriver是Windows专用的,所以它尝试使用所谓的“原生”或OS级事件在浏览器中执行鼠标和键盘操作。这与对相同操作使用模拟JavaScript事件形成了对比。

除了点击<option>元素,它使用JavaScript。

IE驱动程序通过使用click()自动化Atom,它本质上设置了.selected属性,并模拟onChange事件。

票数 0
EN

Stack Overflow用户

发布于 2018-02-02 17:54:36

要点

Chrome、Firefox和InternetExplorer的驱动程序都是RemoteWebDrivers...

这意味着Selenium执行的任何操作都被发送到浏览器(WebDriver),通过HttpRequest...

一旦浏览器接收到请求,它将作为“本机事件”或综合执行该操作。浏览器执行操作的方式取决于浏览器的功能(以及潜在的标志选项)。

“原生”事件是操作系统级事件。

综合执行的操作使用JavaScript执行。“AutomationAtoms”被使用--正如从‘ATOM’中推断出来的那样,它们是执行低级操作的小而简单的函数。

参考文献

  • RemoteWebDriver子类ChromeDriverFirefoxDriverInternetExplorerDriverOperaDriver,和SafariDriver(参照系)
  • 所有与浏览器或RemoteWebDriver服务器通信的WebDriver实现都应该使用公共的有线协议。此连接协议定义了RESTful Web服务使用JSON通过HTTP。(参照系)
  • 在WebDriver中,高级用户交互是通过直接模拟JavaScript事件(即合成事件)或让浏览器生成JavaScript事件(即本机事件)来提供的。本机事件更好地模拟用户交互,而合成事件与平台无关。...应尽可能使用本机事件。(参照系)
  • Browser AutomationAtoms是用于Selenium实现的构建块。通过在整个代码库中使用相同的部分,而不是在多个地方重新实现所需的功能,项目可以减少发现的bug数量,并简化添加新功能和驱动程序的过程。(参照系)

自动化原子

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档