【问题标题】:Selecting from div class dropdown - Selenium从 div 类下拉列表中选择 - Selenium
【发布时间】:2018-10-05 13:06:34
【问题描述】:

我正在尝试从下拉列表中选择一个选项,该选项在单击定位器之前不会填充。这是我在 Firebug 中看到的:

div class="selectize-input items not-full has-options">
<input type="text" autocomplete="off" tabindex="" placeholder="523-23-XXXXX" style="width: 109px; opacity: 1; position: relative; left: 0px;">
</div>
<div class="selectize-dropdown multi form-control" style="display: none; width: 263px; top: 34px; left: 0px; visibility: visible;">
<div class="selectize-dropdown-content">
<div class="option" data-selectable="" data-value="523-23-20273">523-23-20273</div>
<div class="option" data-selectable="" data-value="523-23-20274">523-23-20274</div>
<div class="option" data-selectable="" data-value="523-23-20275">523-23-20275</div>
<div class="option" data-selectable="" data-value="523-23-20276">523-23-20276</div>
<div class="option" data-selectable="" data-value="523-23-20280">523-23-20280</div>
<div class="option" data-selectable="" data-value="523-23-202801">523-23-202801</div>

我目前的代码是:

public void selectAgentCodes(String agentCode)
    {
        driver.findElement(byAgentCodes).click();
        new WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOfElementLocated(By.className("selectize-dropdown-content")));
        Select select = new Select(driver.findElement(By.className("selectize-dropwodn-content")));
        select.selectByVisibleText(agentCode);
    }

我得到一个UnexpectedTagNameException:元素应该是“select”但是“div”。我不知道如何处理这个问题,因为我以前只使用过选择。

假设我想为代理代码选择“523-23-20275”。我该怎么办?

感谢任何帮助!谢谢。

【问题讨论】:

    标签: java selenium drop-down-menu selenium-webdriver css-selectors


    【解决方案1】:

    这不是一个普通的下拉选择菜单。因此,在这种情况下,使用 Select 将不起作用。没有看到完整的网站,我不确定必须做些什么才能选择它。

    但是,当下拉列表中的选项可见时,尝试简单地单击 div 元素。

    //I'm assuming that this will display the dropdown list
    driver.findElement(byAgentCodes).click(); 
    
    driver.findElement(By.xpath("//div[@data-value='523-23-20275']"));
    

    【讨论】:

      【解决方案2】:

      这里,如果UI中没有select标签,Select class就不起作用,你需要点击主div,然后你需要点击任何一个有多个选项的div,它会先点击下拉菜单,然后单击列表中的特定元素, 下面的代码希望对你有用....

      1)首先,您需要通过任何可用方法(如 id、xpath、css 选择器)找到它来单击此 div, driver.findElement(byAgentCodes).click(); 点击它会打开一个下拉列表

      2) 重复上述第 1 点以单击下拉列表中的任何列表项

      523-23-20275

      这会起作用的。

      【讨论】:

        【解决方案3】:

        按照以下步骤选择 div 标签下的项目:

        您必须使用集合对象来存储存储在同一标签下的所有子元素。 对于 Ex,如果您有以下 HTML 结构:

        <div id="Year">
            <div class="abc">
                 <ul class = "xyz">
                     <li id=1>2000</li>
                     <li id=2>2001</li>
                     <li id=3>2002</li>
                     <li id=4>2003</li>
                     <li id=5>2004</li>
                 </ul>
            </div>
        </div>
        

        在下面写下 selenium 代码:​​

        List<Webelement> lst = driver.findElements(By.xpath(<locator of child elements>));
        
        //In this case it is //div[@id='Year']/div/ul/li
        

        系统会将所有子元素存储在列表中,然后您可以使用索引方法选择任何元素

        lst.get(<index value>).click();
        

        如果您不想使用索引查找但文本使用迭代器接口从集合中查找元素然后单击该元素:

        Iterator<Webelement> it = lst.iterator();
        while (it.hasNext()) {
            WebElement wb  = it.next();
            if(wb.getText().equals(<Text to find in double quotes>)) {
                wb.click();
                break;
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多