Reputation: 67
Here I am trying to select a value from dropdown using selenium script but I got this error in the console like
"Exception in thread "main" org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span"..
public class HomeUserManagement {
public static void main(String args[]) {
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\UMASHANKAR\\Documents\\selenuim\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.manage().window().maximize();
//for login
driver.get("https://ecabportal.azurewebsites.net/dashboard");
driver.findElement(By.name("email")).sendKeys("[email protected]");
driver.findElement(By.name("password")).sendKeys("abc123xyz");
driver.findElement(By.name("signIn")).click();
//actual code for selecting a value from dropdown
driver.get("https://ecabportal.azurewebsites.net/user");
Select drpdwn=new Select(driver.findElement(By.id("select2-signup-username-container")));
drpdwn.selectByVisibleText("User Name");
drpdwn.selectByIndex(0);
there are multiple values in a dropdown I need to select one value in that..
Upvotes: 1
Views: 9095
Reputation: 193338
This error message...
"Exception in thread "main" org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span"
...implies that you have used Select
class to interact with the desired element where as the element was a <span>
.
To select a value e.g. User Name from the dropdown using Selenium you can use the following solution:
Code Block:
driver.get("https://ecabportal.azurewebsites.net/dashboard");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("email"))).sendKeys("[email protected]");
driver.findElement(By.name("password")).sendKeys("NsSaNj@0205");
driver.findElement(By.name("signIn")).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h1[contains(., 'Dashboard')]")));
driver.get("https://ecabportal.azurewebsites.net/user");
new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@id='load']")));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.select2-selection.select2-selection--single>span.select2-selection__rendered"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='select2-results']//li[contains(., 'User Name')]"))).click();
Browser Snapshot:
Note:
elementToBeClickable()
before attempting click()
method when the page changes i.e. DOM changes.invisibilityOfElementLocated()
and then invoke the required click()
.Upvotes: 0
Reputation: 5204
As the error shows you are using <span>
tag not Select
.
The Select
element you are looking for is //*[@id="signup-username"]
.
Also, you should use WebDriverWait
to wait for your locators:
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
You should look at ExpectedConditions
to wait for...
Hope this helps you!
Upvotes: 3