如何在selenium webdriver的文本字段中逐个输入字符?
如何在selenium webdriver的文本字段中逐个输入字符? 我使用了下面的代码,但它不起作用
getDriver().findElement(By.id("PhoneNumber")).sendKeys(Keys.chord("9876544322"));
任何人都可以建议如何解决这个问题?
sendKeys()
确实按顺序输入字符,但它有时可以足够快地运行以被视为复制/粘贴操作。 但是,它实际上是为了模拟用户通过键入输入文本。 根据sendKeys()
JavaDoc:
/ **使用此方法模拟键入元素,可以设置其值。 * /
如果你想减慢速度,可以创建一个接受WebElement和String args的方法,将String转换为charsequence[]
,然后使用for循环并在.sendKeys()后面跟一个Thread.sleep()
输入数组的每个索引Thread.sleep()
。 然而,这似乎非常低效,因为sendKeys()
将字符串识别为charsequence[]
(String 是 Java中的charsequence[]
)。 添加Thread.sleep()
只会不必要地减慢测试速度。
老实说, sendKeys()
符合您描述的需求。 这是在键盘上模拟用户的最佳方式,它只是非常快。
以下是我使用Selenium Webdriver(Java)逐个字符发送的方法。 这样在后端,我在每个字母处按下validation字符是否存在于输入中。 正常的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); } }
如您所见,我获得了键入所需的值,在for
循环中,我获取每个字符,将其转换为字符串并将其发送到文本框。 此外,我搜索xpath,您可以将其更改为id,classname或任何你想要的。
.chord()将同时按下所有键。 不太适合现场输入。
.sendKeys()方法将接受一个String。 只需传递您的输入并随意使用它。
driver.findElement(By.id("element")).sendKeys("Field Input Text");
当我想逐个字母地输入字符串时,我在测试中使用此函数。
public void typeOnLetterByLetter(WebElement webElement, String value, long waitBetweenLetters, ChronoUnit unitTime) { clear(webElement); Arrays.asList(value.toCharArray()).forEach(letter -> { typeOn(webElement, String.valueOf(letter)); pause(waitBetweenLetters, unitTime); }); } private void pause(long time, ChronoUnit unitTime) { try { Thread.sleep(Duration.of(time, unitTime).toMillis()); } catch (InterruptedException ignore) { } }