Java 如何自动完成文本框

Java 如何自动完成文本框,java,selenium,autocomplete,ui-automation,Java,Selenium,Autocomplete,Ui Automation,我正在尝试自动化一个测试用例,其中textbox提供了自动完成字段的智能。 请查找以下自动完成文本框的链接: 请找到我写的代码 dr.findElement(By.id("tagss")).sendKeys("a"); Thread.sleep(300); // dr.findElement(By.id("ui-id-53")).click(); Actions act = new Actions(dr); act.moveToElement(dr.findElement(B

我正在尝试自动化一个测试用例,其中textbox提供了自动完成字段的智能。 请查找以下自动完成文本框的链接:

请找到我写的代码

  dr.findElement(By.id("tagss")).sendKeys("a");
  Thread.sleep(300);
//  dr.findElement(By.id("ui-id-53")).click();
  Actions act = new Actions(dr);
  act.moveToElement(dr.findElement(By.id("ui-id-53"))).click().build().perform();

此代码无法在浏览器提供的智能中查找和定位选项。请提供帮助。

您无法在DOM中找到自动建议选项元素,因为这些选项的HTML id在页面重新加载后会更改

在这种情况下,需要使用XPath来标识元素。假设您想单击Java自动建议选项,那么您的代码应该是-

System.setProperty("webdriver.chrome.driver","C:\\WebDriver\\TestAutomation\\grid\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://demoqa.com/autocomplete/");
driver.manage().window().maximize();
driver.findElement(By.id("tagss")).sendKeys("a");
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("ui-id-1"))));
WebElement javaOption = driver.findElement(By.xpath(".//li[@class='ui-menu-item' and text()='Java']"));
javaOption.click();
使用
Thread.sleep()不是一个好习惯


希望这对您有所帮助。

因为您使用的是动态id,在运行时可能会更改。 尝试此代码,并让我知道任何查询-

public class AutoSuggest {

     public static void main(String[] args) throws InterruptedException {
            try {

                  System.setProperty("webdriver.chrome.driver", "C:\\Users\\Ranosys\\workspace\\MyTest\\chromedriver.exe");
                  WebDriver driver = new ChromeDriver();
                  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                  WebDriverWait wait=new WebDriverWait(driver,50 );

                  driver.manage().window().maximize();

                  driver.get("http://demoqa.com/autocomplete/");
                  driver.findElement(By.id("tagss")).sendKeys("a");
                  Actions act = new Actions(driver);
                  List<WebElement> lst= driver.findElements(By.xpath("//li[contains(@id,'ui-id')]"));
                  for(WebElement element:lst){
                      element.click();
                      break;
                  }

            } catch (Exception e) {
                e.printStackTrace();
            }
     }


}
公共类自动建议{
公共静态void main(字符串[]args)引发InterruptedException{
试一试{
System.setProperty(“webdriver.chrome.driver”,“C:\\Users\\Ranosys\\workspace\\MyTest\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
WebDriverWait wait=新的WebDriverWait(驱动程序,50);
driver.manage().window().maximize();
驱动程序。获取(“http://demoqa.com/autocomplete/");
driver.findElement(By.id(“tagss”)).sendKeys(“a”);
动作动作=新动作(驱动);
List lst=driver.findElements(By.xpath(//li[contains(@id,'ui-id')]);
for(WebElement:lst){
元素。单击();
打破
}
}捕获(例外e){
e、 printStackTrace();
}
}
}

谢谢您的帮助。它起作用了。我稍微修改了一下代码列表选项=dr.findElements(按.className(“ui菜单项”);对于(WebElement x:option){if(x.getText().toLowerCase().equals(“java”){x.click();}}`我尝试过,但我的声誉是11,它说我的声誉不足以做到这一点。对不起,阿莫尔