使用Selenium单击自动完成菜单项

时间:2014-08-27 11:00:08

标签: java html selenium autocomplete automation

我正在尝试在搜索向导中测试自动完成功能,其中在发送搜索查询后,我必须点击顶部菜单项,该项目将显示为自动完成,就像在Google搜索中一样。

下面是我在搜索栏中输入Text时显示的html结构:

<ul class="ui-autocomplete ui-autocomplete-icons ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox">
<li class="ui-menu-item" role="menuitem">
    <a class="partition_item ui-corner-all" tabindex="-1">
        <i class="autocomplete_icons autocomplete_city"></i>
        <span><b>Text A</b></span>
    </a>
</li>


<li class="ui-menu-item" role="menuitem">
    <a class="partition_item ui-corner-all" tabindex="-1">
        <i class="autocomplete_icons autocomplete_city"></i>
        <span><b>Text B</b></span>
    </a>
</li>

在这种情况下,我需要点击自动完成中的第一个菜单项Text A。 以下是我在java中尝试的内容:

destinationInput.sendKeys(city);
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("ul.ui-autocomplete")));
    List <WebElement> listItems = driver.findElements(By.className("partition_item"));
    listItems.get(0).click();

但似乎没有任何事情发生。我在IndexOutOfBoundException得到listItems.get(0),我猜是因为它无法在ul元素中获取锚标记。

我也经历过this answer,但无法将其合并到java中。请指导。

1 个答案:

答案 0 :(得分:0)

尝试使用css选择器找到你的元素,像

一样
wait.until(ExpectedConditions.visibilityOfElementLocated(By.Css(".ui-autocomplete"))); 
List <WebElement> listItems = driver.findElements(By.Css(".ui-menu-item"));
listItems[0].click();

不确定java语法,但应该可以。