java - Selenium - 在同一字段中输入的文本,即使打算在不同的字段中输入

标签 java selenium selenium-webdriver selenium-chromedriver ubuntu-16.04

使用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/

相关文章:

java - 需要有关应用程序架构的建议

c# - Selenium 与 PhantomJs 等到页面完全加载?

Python selenium打印框架源码

javascript - 如何使用 Selenium 中的 JQuery 在 h3 中创建 .delay 函数?

python - 如何使用 selenium webdriver Python 单击没有 lisk 的 span 按钮?

java - Excel POI : "We found a problem with some content in ... " when the Excel has less than 135 Rows

java - 大十进制低值

java - 如何避免在我的应用程序中将 APK 反编译为 Java 文件

java - org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;) 由于 JsonException : Attempting to close incomplete json stream

java - webDriver 中的分页显示陈旧元素引用异常