首页 > 解决方案 > WebElement.sendKeys(CharSequence...) 通过 Selenium 仅发送部分值

问题描述

在输入元素中设置值:

WebElement input = ...
input.sendKeys("1234989");

有时,输入元素只得到“1”,而不是“1234989”,这里有什么竞争条件吗?

另一种方式:

Actions actions = new Actions(driver);
actions.sendKeys(input, "1234989").build().perform();

这个似乎效果更好。有什么区别?

标签: google-chromeselenium-webdriverwebdriverselenium-chromedriversendkeys

解决方案


所需元素的相关 HTML 将帮助我们调试为什么所需元素仅填充1而不是1234989。但是,根据最佳实践,在向字段发送字符序列时,input您应该始终诱导WebDriverWaitelementToBeClickable()如下:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("css_input_element"))).sendKeys("1234989");

您可以在以下位置找到一些相关的讨论:


sendKeys(WebElement target, java.lang.CharSequence... keys)

sendKeys(WebElement target, java.lang.CharSequence...keys)来自Actions该类,相当于调用Actions.click(element).sendKeys(keysToSend). 这种方法不同于WebElement.sendKeys(CharSequence...).


public Actions sendKeys(java.lang.CharSequence... keys)

public Actions sendKeys(java.lang.CharSequence... keys)CharSequence发送到活动元素。同样,这与WebElement.sendKeys(CharSequence...)在两个方面调用活动元素不同:

  • 此调用中包含的修饰键未释放。
  • 没有尝试重新聚焦元素,因此sendKeys(Keys.TAB)切换元素应该可以工作。

您可以在使用 Selenium 的 click_and_hold 方法时找到详细讨论,究竟是什么条件或动作导致鼠标单击释放?


推荐阅读