Search code examples
javaseleniumselenium-webdriverwebdriverwebdriverwait

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..


Solution

  • 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().