Now a days, in most of the applications, we can see a 'Auto Complete' textboxes which will help users to quickly find the option from a pre-populated list of values based on the text that is entered by the user. It mainly concentrates on providing suggestions to users while typing into the field.
Let us now see a basic example. When we enter any text, we can select the value from the pre-populated list by using 'String' or 'Index value'
package com.pack.auto;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class AutoCompleteExample {
WebDriver driver;
WebDriverWait wait;
String URL = "http://jqueryui.com/autocomplete/";
private By frameLocator = By.className("demo-frame");
private By tagText = By.id("tags");
@BeforeClass
public void Setup() {
driver = new FirefoxDriver();
driver.manage().window().maximize();
wait = new WebDriverWait(driver, 5);
}
@Test
public void rightClickTest() {
driver.navigate().to(URL);
WebElement frameElement=driver.findElement(frameLocator);
driver.switchTo().frame(frameElement);
wait.until(ExpectedConditions.presenceOfElementLocated(tagText));
WebElement textBoxElement = driver.findElement(tagText);
textBoxElement.sendKeys("a");
selectOptionWithText("Java");
//selectOptionWithIndex(2);
}
Below is the code to select the Option based on the string passed in the Test. We are List
public void selectOptionWithText(String textToSelect) {
try {
WebElement autoOptions = driver.findElement(By.id("ui-id-1"));
wait.until(ExpectedConditions.visibilityOf(autoOptions));
List<WebElement> optionsToSelect = autoOptions.findElements(By.tagName("li"));
for(WebElement option : optionsToSelect){
if(option.getText().equals(textToSelect)) {
System.out.println("Trying to select: "+textToSelect);
option.click();
break;
}
}
} catch (NoSuchElementException e) {
System.out.println(e.getStackTrace());
}
catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
Below is the method to select Option based on the index value. We need to pass the index value to select the required value. If you are not specific to the value, we can just select first value always.
public void selectOptionWithIndex(int indexToSelect) {
try {
WebElement autoOptions = driver.findElement(By.id("ui-id-1"));
wait.until(ExpectedConditions.visibilityOf(autoOptions));
List<WebElement> optionsToSelect = autoOptions.findElements(By.tagName("li"));
if(indexToSelect<=optionsToSelect.size()) {
System.out.println("Trying to select based on index: "+indexToSelect);
optionsToSelect.get(indexToSelect).click();
}
}
catch (NoSuchElementException e) {
System.out.println(e.getStackTrace());
}
catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
@AfterClass
public void tearDown() {
driver.quit();
}
}
Comments
Selenium WebDriverJS
How we can do this in selenium WebDriverJS ?
Add new comment