Selenium的“ sendKeys”方法是否首先对目标元素执行“点击”?

时间:2019-08-13 14:47:58

标签: java selenium selenium-webdriver keyboard focus

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

我目前正在使用Selenium实现测试的技术是Web。

现在,假设用户想在文本字段中键入内容,那么用户实际上将要执行的操作是单击文本字段然后开始键入。就其本身而言,在键盘上键入与文本字段无关,只是因为单击将焦点切换到了文本字段,文本字段才接收到键盘输入。

现在,Selenium具有sendKeys方法。确切地说,该方法有什么作用? Javadoc指出“使用此方法来模拟键入元素的操作,这可以设置其值”。

sendKeys方法是否像真实用户一样模拟点击(就像首先调用.click)然后模拟键盘输入?还是设置焦点然后开始输入?还是完全避开了焦点,只是将“键盘输入”发送到输入元素?

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

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

1 个答案:

答案 0 :(得分:4)

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

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

聚焦发生独立于特定的“单击”动作。实际上,给定的规范实现(chromedrivergeckodriver等)可以通过单击元素来“运行聚焦步骤”。我不认为任何实施方式实际上都具有这种行为,但是您需要针对各个实施方式进行验证。

Tl; dr ,不,sendKeys不一定表示click