Raj*_*tra 5 java selenium selenium-webdriver
如何在selenium webdriver的文本字段中逐个输入字符?我使用了下面的代码,但它不起作用
getDriver().findElement(By.id("PhoneNumber")).sendKeys(Keys.chord("9876544322"));
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何解决这个问题?
小智 9
以下是我使用Selenium Webdriver(Java)逐个字符发送的方法.这样在后端,我在每个字母处按下验证字符是否存在于输入中.正常element.sendKeys()对我来说效果不好5次 - 最后一个字母丢失了,我想Selenium Webdriver有些问题,我不知道.尝试下面的代码,它可以100%的时间为我工作.
public void TypeInField(String xpath, String value){
String val = value;
WebElement element = driver.findElement(By.xpath(xpath));
element.clear();
for (int i = 0; i < val.length(); i++){
char c = val.charAt(i);
String s = new StringBuilder().append(c).toString();
element.sendKeys(s);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我获得了键入所需的值,并且在for循环中,我获取每个字符,将其转换为字符串并将其发送到文本框.此外,我搜索xpath,您可以将其更改为id,classname或任何你想要的.
如果你想让你的 sendKeys 更人性化,我使用了这样的东西:
private static void sendHumanKeys(WebElement element, String text) {
Random r = new Random();
for(int i = 0; i < text.length(); i++) {
try {
Thread.sleep((int)(r.nextGaussian() * 15 + 100));
} catch(InterruptedException e) {}
String s = new StringBuilder().append(text.charAt(i)).toString();
element.sendKeys(s);
}
}
Run Code Online (Sandbox Code Playgroud)
它以 100 毫秒的延迟发送密钥,但平均只有 100 毫秒。它创建了一个平均 100ms 和 std 的正态分布。偏差 15ms。
sendKeys()确实按顺序输入字符,但它有时可以足够快地运行以被视为复制/粘贴操作.但是,它实际上是为了模拟用户通过键入输入文本.根据sendKeys()JavaDoc:
/**使用此方法模拟键入元素,可以设置其值.*/
如果你想减慢速度,可以创建一个接受WebElement和String args的方法,将String转换为charsequence[],然后使用for循环并在.sendKeys()中输入数组的每个索引,后跟a Thread.sleep().这似乎很没效率的,但是,作为sendKeys()识别字符串作为charsequence[](字符串是一个charsequence[]在Java中).添加Thread.sleep()遗嘱只会不必要地减慢您的测试速度.
老实说,sendKeys()符合您描述的需求.这是在键盘上模拟用户的最佳方式,它只是非常快.
.chord() 将同时按下所有键。不太适合现场输入。
.sendKeys() 方法将接受一个字符串。只需传递您的输入并进行操作即可。
driver.findElement(By.id("element")).sendKeys("Field Input Text");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17569 次 |
| 最近记录: |