如何找到动态下拉列表元素的Web元素位置?

时间:2019-09-17 10:19:54

标签: java selenium

我无法找到下拉列表的动态Web元素位置

histograms

这是我的示例html代码

public void selectClassofService(String value) throws InterruptedException
{

    driver.findElement(By.xpath("/html/body/div[1]/div/div/div/div[3]/div[2]/div[2]/div/div/div/div[2]/div[2]/div[2]/form/div[5]/div/div[2]/div/div/div[1]/input")).click();

   List<WebElement> list = driver.findElements(By.xpath("/html/body/div[1]/div/div/div/div[3]/div[2]/div[2]/div/div/div/div[2]/div[2]/div[2]/form/div[5]/div/div[2]/div/div/div[1]/input"));
    System.out.println("Size of the list size =" + list.size());
    for (int i = 0; i < list.size(); i++) {
        System.out.println("names of the divisions " + list.get(i).getText());

        if (list.get(i).getText().contains(value)) {
            list.get(i).click();
            break;
        }

    }

1 个答案:

答案 0 :(得分:0)

首先,停止编写太长的xpath 。有更好的方法来访问元素而不是执行令人毛骨悚然的事情。

String dropdownXpath = "//input[@class='vs_dropdown-menu' and @role='listbox']";

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath(dropdownXpath))).click();

List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(dropdownXpath + "//li[@class='vs_dropdown-option' and @role='option']")));

for (WebElement element:myList)
{
    System.out.println("names of the divisions " + element.getText());
    if(element.getText().contains("Mumbai"));
        element.click();
}

如果无法像上面那样访问下拉菜单,只需像这样获取父div的ID:

String dropdownXpath = "//div[@id='some-id']input[@class='vs_dropdown-menu' and @role='listbox']";

不要通过抓取html标签来查找元素来浪费时间。

相关问题