Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium—在同一字段中输入的文本,即使要在不同字段中键入_Java_Selenium_Selenium Webdriver_Selenium Chromedriver_Ubuntu 16.04 - Fatal编程技术网

Java Selenium—在同一字段中输入的文本,即使要在不同字段中键入

Java Selenium—在同一字段中输入的文本,即使要在不同字段中键入,java,selenium,selenium-webdriver,selenium-chromedriver,ubuntu-16.04,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 = findEl

使用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);
 }
提前感谢。

操作执行以下步骤:

  • 获取元素的坐标
  • 在获得的坐标处单击(使用鼠标操作)
  • “键入”文本(将由当前关注的任何元素接收)
如果在开始操作时无法聚焦元素(例如,因为它被禁用),或者如果在获取坐标和单击/聚焦元素之间坐标发生变化(因为布局仍在变化),则可能会出错

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

  • 硒点击
  • onClick操作开始(元素可能只有在完成后才会聚焦)
  • Selenium开始键入(onClick尚未键入) 尚未返回,因此错误的元素将获取文本)
  • onClick 行动结束了,但到那时Selenium也完成了
作为一种解决方案,您可以尝试直接聚焦元素,并在发送键之前等待它真正聚焦。问题可能适用于这种情况。

操作执行以下步骤:

  • 获取元素的坐标
  • 在获得的坐标处单击(使用鼠标操作)
  • “键入”文本(将由当前关注的任何元素接收)
如果在开始操作时无法聚焦元素(例如,因为它被禁用),或者如果在获取坐标和单击/聚焦元素之间坐标发生变化(因为布局仍在变化),则可能会出错

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

  • 硒点击
  • onClick操作开始(元素可能只有在完成后才会聚焦)
  • Selenium开始键入(onClick尚未键入) 尚未返回,因此错误的元素将获取文本)
  • onClick 行动结束了,但到那时Selenium也完成了

作为一种解决方案,您可以尝试直接聚焦元素,并在发送键之前等待它真正聚焦。这个问题可能在这种情况下有用。

给我们您使用的定位器,页面URL页面URL是内部的。用户名id=login\u用户名/密码id=login\u密码添加一些被剪掉的代码。如何,您正在尝试定位和
html
以及如何获取定位器?
driver.findElement(By.id(“login\u username”)
提供您使用的定位器,并且页面URL页面URL是内部的。用户名id=login\u用户名/密码id=login\u密码添加一些被剪掉的代码。如何查找和
html
以及如何获取定位器?
driver.findElement(By.id(“login\u username”)
platform: Ubuntu 16.04.1 LTS 64-bit 
chromedriver version: 2.25
chrome browser version: 55.0.2883.87