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

时间:2016-12-26 06:48:58

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

使用selenium时,在尝试以登录形式输入用户名和密码时,有时会在同一字段中输入文本。用户名和密码具有唯一标识符。

要发送密钥,请执行以下步骤。

 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

提前致谢。

1 个答案:

答案 0 :(得分:0)

sendKeys()操作执行以下步骤:

  • 获取元素的坐标
  • 点击它所获得的坐标(使用鼠标操作)
  • “键入”文本(将由当前关注的任何元素接收)

如果在启动动作时元素无法聚焦(例如,因为它被禁用),或者坐标在获取坐标和单击/聚焦元素之间发生变化(因为布局仍在变化),可能会出错

另一个常见原因可能是挂在元素上的onClick动作,这会导致竞争条件。在没有看到实际页面的情况下,有可能在点击硒后,在键入文本时onClick操作仍然有效。这基本上是这样的:

  • Selenium点击
  • onClick动作开始(元素可能只在完成后才会聚焦)
  • Selenium开始打字(onClick没有 返回,所以错误的元素得到文本)
  • onClick 行动结束了,但到那时Selenium也完成了。

作为一种解决方案,您可以尝试直接聚焦元素,并在发送密钥之前等待它真正聚焦。 This问题可能适用于此案例。