Selenium自动化 - 如何从此列表中选择下拉菜单项而不会出现异常错误?

问题描述 投票:1回答:2

我想从网页下面的下拉菜单中选择一个下拉菜单项:

Drop menu with menu items

HTML code for the drop menu

HTML code for menu items

我尝试了以下3种方法来选择带有文本“Test”(索引[1])的项目:

  • 情况1:
   driver.findElement(By.id("combo-1781-inputEl")).click();

   driver.findElement(By.id("combo-1781-inputEl")).sendKeys("Test");

没有出现错误(测试通过)。但是“测试”项目文本未显示在选中的下拉菜单字段上。

  • 案例2:
     driver.findElement(By.id("combo-1781-inputEl")).click();

     Select drp = new Select(driver.findElement(By.id("boundlist-1930-listEl")));
     drp.selectByVisibleText("Test");

抛出了org.openqa.selenium.support.ui.UnexpectedTagNameException。测试失败。

  • 案例3:
    Select drp = new Select(driver.findElement(By.id("boundlist-1930-listEl")));
    drp.selectByIndex(1);

抛出了org.openqa.selenium.support.ui.UnexpectedTagNameException。测试失败。

java eclipse selenium selenium-webdriver automation
2个回答
2
投票

您可以先使用以下命令单击下拉元素:

driver.findElement(By.id("combo-1781-inputEl")).click();

然后您可以使用以下命令单击“Test”元素:

driver.findElement(By.xpath("//div[@id='boundlist-1930-listEl']//li[text()='Test']")).click();

你也可以在这里参数化“测试”文本,以便将来如果你想点击任何其他下拉值,你可以在xpath中发送该文本然后点击它,你可以这样做:

String text="Test";
driver.findElement(By.xpath("//div[@id='boundlist-1930-listEl']//li[text()="+text+"]")).click();

1
投票

从您的代码中可以看出,id为boundlist-1930-listEl的元素不是<select>节点。这就是UnexpectedTagNameException被抛出的原因。

要从这种下拉列表中选择项目,您需要首先显示下拉列表,我假设通过单击<input>元素。然后,您必须等待列表显示,然后单击要选择的项目。

试试这个:

WebDriverWait wait = new WebDriverWait(driver,30);

driver.findElement(By.id("combo-1781-inputEl")).click();

wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("div#bounddlist-1930-list > ul"))));

driver.findElement(By.xpath("//div[@id='bounddlist-1930-list']/ul/li[contains(text(),'Test')]")).click();

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