google-chrome - WebElement.sendKeys(CharSequence...) 通过 Selenium 仅发送部分值
问题描述
在输入元素中设置值:
WebElement input = ...
input.sendKeys("1234989");
有时,输入元素只得到“1”,而不是“1234989”,这里有什么竞争条件吗?
另一种方式:
Actions actions = new Actions(driver);
actions.sendKeys(input, "1234989").build().perform();
这个似乎效果更好。有什么区别?
解决方案
所需元素的相关 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 方法时找到详细讨论,究竟是什么条件或动作导致鼠标单击释放?
推荐阅读
- material-design - 如何为 mkdocs-material 指定自定义原色?
- r - 使用两个标准时未使用 dplyr 加入的数据框
- shiny - 标题中的粒子动画
- python - 如果组在特定字符串之前或之后,则正则表达式捕获组
- javascript - 如何格式化数组中的日期
- neo4j - Neo4j:测试 PageRank 'None' 结果
- firebase - firebase .streamDataCollection 监听器给出的结果集的读取成本?
- r - 如何在地图(例如德国)中为没有边界线的区域着色?
- c - 根据输入打印一个字符 n 次
- azure - 分配为 Azure AD 应用程序的所有者,但仍无法对其进行配置