org.openqa.selenium.support.ui.UnexpectedTagNameException: элемент должен был быть "select", но был "span" при выборе раскрывающегося значения - PullRequest
1 голос
/ 06 июня 2019

Здесь я пытаюсь выбрать значение из выпадающего списка, используя сценарий селена, но я получил эту ошибку в консоли, как

"Исключение в потоке" 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("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);

в раскрывающемся списке есть несколько значений, мне нужно выбрать одно значение в этом ..

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Как показывает ошибка, вы используете тег <span>, а не Select.

Элемент Select, который вы ищете, это //*[@id="signup-username"].

Кроме того, вы должны использовать WebDriverWait для ожидания ваших локаторов:

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

Вы должны посмотреть на ExpectedConditions, чтобы ждать ...

Надеюсь, это поможет вам!

0 голосов
/ 06 июня 2019

@ Анализ и ответ Моше Славина были в правильном направлении.

Это сообщение об ошибке ...

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

... подразумевает, что вы использовали Select класс для взаимодействия с желаемым элементом, где в качестве элемента было <span>.

Для выбора значения, например Имя пользователя из выпадающего списка, используя Селен , вы можете использовать следующее решение:

  • Кодовый блок:

    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();
    
  • Снимок браузера:

UserName* * 1030


Примечание:

  • Всегда вызывайте WebDriverWait для elementToBeClickable() перед попыткой click() метода при изменении страницы, т.е. изменения DOM.
  • В этом конкретном сценарии использования, когда вы переходите на нужную страницу, существует наложение, для которого вам нужно вызвать WebDriverWait для invisibilityOfElementLocated(), а затем вызвать необходимый click().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...