我想从网页下面的下拉菜单中选择一个下拉菜单项:
我尝试了以下3种方法来选择带有文本“Test”(索引[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。测试失败。
Select drp = new Select(driver.findElement(By.id("boundlist-1930-listEl")));
drp.selectByIndex(1);
抛出了org.openqa.selenium.support.ui.UnexpectedTagNameException。测试失败。
您可以先使用以下命令单击下拉元素:
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();
从您的代码中可以看出,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();