java - Selenium 的 "sendKeys"方法是否首先对目标元素执行 "click"?

标签 java selenium selenium-webdriver keyboard focus

我目前正在为小部件编写 cucumber 测试,这些小部件将(并且正在)以不同的技术(不同的 Web 框架、Java Swing [不是真的,但技术上应该是可能的] 等)实现。这些测试旨在通过​​直接模拟用户的输入来描述被测小部件的功能。例如,测试可以表述为“用户打开网页 X,然后点击那里,然后点击那里,然后点击那里,现在我希望这个文本字段包含值 Y”。

我目前实现测试的技术是网络,使用 Selenium。

现在,假设用户想要在文本字段中输入内容,那么用户实际上要做的就是单击文本字段,然后开始输入。就其本身而言,在键盘上键入内容与文本字段没有任何关系 - 只是因为单击将焦点切换到文本字段,文本字段才会接收键盘输入。

现在,Selenium 有一个 sendKeys 方法。这个方法到底是做什么的? javadoc 声明“使用此方法模拟输入元素,这可能会设置其值”。

sendKeys 方法是否模拟单击(就好像首先调用 .click),然后模拟键盘输入,就像真实用户那样?或者它会设置焦点然后开始打字吗?或者它是否完全绕过焦点并简单地将“键盘输入”发送到输入元素?

由于某些小部件在单击时可能会表现出特殊行为,因此我需要知道 Selenium 是否在幕后执行单击,或者我是否必须手动调用它才能真实地模拟用户的行为。

注意:我没有将 cucumber 添加到标签中,尽管与上下文相关,但与实际问题无关

最佳答案

请记住,元素可以通过单击以外的方式获得键盘焦点。例如,用户可以使用 Tab 键浏览表单的元素。

对于 Selenium 和 WebDriver,驱动程序为 sendKeys 方法采取的步骤由 W3C WebDriver Specification 定义。 。为了在模拟按键输入之前将焦点设置到某个元素,该规范又链接到 WHATWG HTML Specification .

聚焦的发生与特定的“单击”操作无关。实际上,给定的规范实现(chromedrivergeckodriver 等)可能会通过单击该元素来“运行聚焦步骤”。我不相信任何实现实际上都会以这种方式运行,但您需要针对各个实现进行验证。

Tl;dr,不,sendKeys 并不一定意味着点击

关于java - Selenium 的 "sendKeys"方法是否首先对目标元素执行 "click"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480256/

相关文章:

python - 将 python selenium 转换为 selenium ide 命令

java - 在 Jython 中编写 JUnit 测试

java - 对话框中的通用 onclick 监听器

Java 终止程序

linux - 如何在安装了 jenkins 的 Azure VM 实例中以 GUI 模式执行 selenium 测试

java - 如何使用Webdriver Sampler在jmeter中定义和调用java方法

Selenium Webdriver Python 如何从输入标签获取文本

java - 从 Action 监听器调用 swing JPanel

selenium - Jenkins-selenium webdriver-chrome 驱动程序

python - 单击由 JavaScript 使用 Python Webdriver 编写的数据绑定(bind)下的按钮