使用selenium,当尝试在登录表单中输入用户名和密码时,有时会在同一字段中输入文本。用户名和密码具有唯一的标识符。
要发送 key ,请完成以下步骤。
sendKeys(By.id("login_username"), "abc");
sendKeys(By.id("login_password"), "efg");
public void sendKeys(By locator, String text) {
WebElement element = findElement(locator);
if(element != null) {
element.clear();
element.sendKeys();
}
}
public WebElement findElement(By locator) {
return wait(org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated(locator));
}
public WebElement wait(ExpectedCondition<WebElement> condition) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).pollingEvery(1, TimeUnit.SECONDS)
.withTimeout(60, TimeUnit.SECONDS)
.ignoreAll(Arrays.asList(NoSuchElementException.class, TimeoutException.class));
return wait.until(condition);
}
但不知何故,当输入文本时,用户名和密码文本都会被输入到密码字段中。但这并不总是发生。无法理解可能出现什么问题或需要检查什么。有什么建议...
platform: Ubuntu 16.04.1 LTS 64-bit
chromedriver version: 2.25
chrome browser version: 55.0.2883.87
提前致谢。
最佳答案
sendKeys()
操作执行以下步骤:
- 获取元素的坐标
- 点击获得的坐标(使用鼠标操作)
- “键入”文本(当前聚焦的任何元素都将接收该文本)
如果元素在启动操作时无法聚焦(例如,因为它被禁用),或者坐标在获取坐标和单击/聚焦元素之间发生变化(因为布局仍在变化),则可能会出错。
另一个常见原因可能是 onClick 操作卡在元素上,这可能会导致竞争条件。在没有看到实际页面的情况下,selenium 单击后,在键入文本时 onClick 操作可能仍在工作。这基本上看起来像这样:
- Selenium 点击
- onClick 操作开始(元素可能仅在完成后才获得焦点)
- Selenium 开始输入(onClick 还没有 尚未返回,因此错误的元素获取了文本)
- onClick Action 完成了,但那时 Selenium 也完成了。
作为解决方案,您可以尝试直接聚焦元素,并等到它真正聚焦后再发送按键。 This问题可能对这种情况有用。
关于java - Selenium - 在同一字段中输入的文本,即使打算在不同的字段中输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41327438/