org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应该是“选择";但是是“跨度"在选择下拉值时

在这里,我尝试使用 selenium 脚本从下拉列表中选择一个值,但我在控制台中收到此错误,例如

<块引用>

线程main"中的异常 org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应该是select",但是是span"..

公共类 HomeUserManagement {公共静态无效主要(字符串参数[]){System.setProperty("webdriver.chrome.driver","C:\Users\UMASHANKAR\Documents\selenuim\chromedriver.exe");WebDriver driver=new ChromeDriver();driver.manage().window().maximize();//用于登录driver.get("https://ecabportal.azurewebsites.net/dashboard");driver.findElement(By.name("email")).sendKeys("abc@xyz.in");driver.findElement(By.name("password")).sendKeys("abc123xyz");driver.findElement(By.name("signIn")).click();//从下拉列表中选择值的实际代码driver.get("https://ecabportal.azurewebsites.net/user");Select drpdwn=new Select(driver.findElement(By.id("select2-signup-username-container")));drpdwn.selectByVisibleText("用户名");drpdwn.selectByIndex(0);

下拉列表中有多个值,我需要在其中选择一个值..

解决方案

这个错误信息...

线程main"中的异常org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应该是选择";但是是跨度"

...暗示您已使用 Select 类与所需元素进行交互,因为该元素是 <span>.

选择一个值,例如用户名使用


注意:

  • 当页面发生变化(即 DOM 发生变化)时,在尝试 click() 方法之前,始终为 elementToBeClickable() 引入 WebDriverWait.
  • 在这个特定的用例中,当您浏览到所需的页面时,您需要为 invisibilityOfElementLocated() 诱导 WebDriverWait 的覆盖,然后调用所需的click().

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("abc@xyz.in");

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

解决方案

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("admin@malbork.in");
      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:

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

相关文章