如何从下拉列表中选择标记名为<div>的随机元素?

时间:2017-06-08 05:26:42

标签: java windows selenium selenium-webdriver

我尝试了 this 这件事情,当我选择了代码名称,但是当我在代码名称Select select = new Select();中使用div时,它可以正常工作,它无法正常工作,并提示我出现以下错误: org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "div"

<div stop-propagation="click" class="custom-select-search">
    <input class="undefined ng-pristine ng-valid ng-touched" type="text" autocomplete="off" ng-model="searchTerm">
</div> 
<ul role="menu">
    <li role="presentation" class="ng-scope">
        <a role="menuitem" tabindex="-1" href=""ng-click="select(s)" class="ng-binding">166</a>
    </li>
    <li role="presentation" class="ng-scope">
        <a role="menuitem" tabindex="-1" href=""ng-click="select(s)" class="ng-binding">164</a>
    </li>
    <li role="presentation" class="ng-scope">
        <a role="menuitem" tabindex="-1" href=""ng-click="select(s)" class="ng-binding">165</a>
    </li>
    <li role="presentation" class="ng-scope">
        <a role="menuitem" tabindex="-1" href=""ng-click="select(s)" class="ng-binding">166</a>
    </li>
</ul>  

这是我的代码:

        WebElement elements = driver.findElement(serial);
        Select ComboBoxValues = new Select(elements);
        List <WebElement> weblist = ComboBoxValues.getOptions();
        int iCnt = weblist.size();
        Random num = new Random();
        int iSelect = num.nextInt(iCnt);
        ComboBoxValues.selectByIndex(iSelect);
        System.out.println("Element Name 1 : " +elements.getAttribute("value"));

任何人都可以告诉我这样做。

2 个答案:

答案 0 :(得分:0)

根据selenium 选择文档,

***打开声明org.openqa.selenium.support.ui.Select

为SELECT标记建模,提供帮助方法来选择和取消选择选项。

表示SELECT可用于仅使用选择标记的下拉列表。您的应用程序下拉列表使用DIV标记。这就是您的代码无法在您的网页上运行的原因

答案 1 :(得分:0)

看起来该网站有一些模拟下拉列表的自定义用户界面。这意味着您必须实现自己的代码才能与之交互。我建议创建一个类,让我们称之为MySiteSelector,它将有一个select()方法,它知道在哪里点击打开菜单列表(它看起来不像这里) ,然后将搜索您的列表项(css选择器将是&#34; ul [role =&#39; menu] li&#34;)以找到与您所需目标匹配的项目。