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

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

带有菜单项的下拉菜单

下拉菜单的 HTML 代码

菜单项的 HTML 代码

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

  • 情况1:

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

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

  • 案例二:

     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 被抛出。测试失败。


眼眸繁星
浏览 143回答 2
2回答

婷婷同学_

您可以首先使用以下方法单击下拉元素:driver.findElement(By.id("combo-1781-inputEl")).click();然后您可以使用以下命令单击“测试”元素: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();

潇潇雨雨

如您的代码所示,具有 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();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java