我想点击下拉按钮并从中选择一个并点击它。我尝试了很多方法,但它无法正常工作。随附的HTML代码图片,任何人都可以帮我解决这个问题。 以下是我试过的代码
driver.findElement(By.id("homepages_dropdown")).click();
/*List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"homepages_item_AccountManagerDashboard\"]"));
for (WebElement element: allElements)
{
System.out.println(element.getText());
}*/
答案 0 :(得分:0)
只需使用“选择”创建一个处理下拉菜单等的对象。您可以使用“选择”按文本,索引和一堆其他选项选择元素。这是处理下拉列表和组合框等元素的最简单方法。
new Select(driver.findElement(By.id("homepages_dropdown"))).selectByVisibleText("Your option's text");
答案 1 :(得分:0)
这不是最明智的方法,但是如果你不能让开发人员通过HTML让它成为一个特定的选择元素,它可能必须这样做。我的解决方案中有类似这样的东西,其中有自定义下拉列表。
你可以先创建一个下拉元素,然后单击其中的一条记录,如果这是你想要做的事情,在你的情况下,它看起来像是突出显示的按钮元素中的跨度,所以你可以做一些事情如下:
driver.findElement(By.id("homepages_dropdown")).click();
driver.findElement(By.xpath("//li//a[@id='homepages_item_AccountManagerDashboard']").click();
上述语句将点击下拉列表,然后点击ID为homepages_item_AccountManagerDashboard
的元素。
您还可以创建一个函数,根据您传递给您创建的方法的参数点击任何li,如果您可以在下拉列表中选择多个选项,请考虑这一点。
public void SelectItem(string itemText)
{
var dropdownElement = driver.findElement(By.id("homepages_dropdown"));
var selectionItem = driver.findElement(By.xpath("//li[text()='" + itemText + "']");
dropdownElement.Click();
selectionItem.Click();
}
如果您正在使用页面对象模型,这只是一个非常有效的选项,但它是让工作长期持续工作的最佳方式。
答案 2 :(得分:0)
点击Dropdown
按钮和Select
Option
,文字为 Analytics
,您可以使用以下代码块:
driver.findElement(By.xpath("//div[@id='homepages']/button/span[@id='homepages_dropdown']")).click();
List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='homepages']/ul/li/a"));
for (WebElement element : allElements)
if(element.getAttribute("innerHTML").contains("Analytics"))
{
element.click();
break;
}
System.out.println("Option with text as Analytics is selected");
答案 3 :(得分:0)
我自己找到了解决方案,下面的代码工作
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("homepages_dropdown")));
// drop down
driver.findElement(By.id("homepages_dropdown")).click();
Thread.sleep(2000);
// selecting configuration
driver.findElement(By.id("homepages_item_ConfigurationHomepage")).click();
Thread.sleep(2000);