org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应该是“select”,但在选择下拉值时是“span”

问题描述 投票:0回答:3

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

“线程“main”org.openqa.selenium.support.ui.UnexpectedTagNameException 中出现异常:元素应该是“select”,但却是“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);

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

java selenium selenium-webdriver webdriver webdriverwait
3个回答
3
投票

错误显示您正在使用

<span>
标签而不是
Select

您要查找的

Select
元素是
//*[@id="signup-username"]

此外,您应该使用

WebDriverWait
等待定位器:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

你应该看看

ExpectedConditions
等待...

希望这对您有帮助!


0
投票

这个错误信息...

"Exception in thread "main" org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span"

...意味着您已使用

Select
类与所需元素进行交互,其中该元素是
<span>

选择一个值,例如使用 Selenium 从下拉列表中输入用户名,您可以使用以下解决方案:

  • 代码块:

      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();
    
  • 浏览器快照:

UserName


注:

  • 当页面更改(即 DOM 更改)时,在尝试 elementToBeClickable() 方法之前,始终为
    click()
    引入
    WebDriverWait
  • 在此特定用例中,当您浏览到所需页面时,有一个覆盖层,您需要为 invisibilityOfElementLocated() 引发
    WebDriverWait
    ,然后调用所需的
    click()

0
投票

如果 html 中没有 select 标签并且仍然出现 org.openqa.selenium.support.ui.UnexpectedTagNameException: Element Should had was "select" but was "div" 的错误该怎么办

© www.soinside.com 2019 - 2024. All rights reserved.