divya u
divya u

Reputation: 67

org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span" while selecting a dropdown value

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

Answers (2)

undetected Selenium
undetected Selenium

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:

UserName


Note:

  • Always induce WebDriverWait for the elementToBeClickable() before attempting click() method when the page changes i.e. DOM changes.
  • In this particular usecase, when you browse to the desired page there is an overlay for which you need to induce WebDriverWait for the invisibilityOfElementLocated() and then invoke the required click().

Upvotes: 0

Moshe Slavin
Moshe Slavin

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

Related Questions