首页 > 解决方案 > 如何等到使用 selenium webdriver 加载 div 下拉列表?

问题描述

一个页面上有两个下拉菜单。

当我点击第一个下拉菜单时,然后在第二个下拉选项中将在几秒钟后自动加载。

我的问题来了,我怎样才能等待第二个下拉列表使用 selenium webdriver 完全加载。

<div name="ddlFruit_N" id="ddlFruit_N" class="Searchddl">
<div class="chosen-drop">
  <div class="chosen-search">
    <input class="chosen-search-input" type="text" autocomplete="off">
  </div>
  <ul class="chosen-results">
<li class="active-result" data-option-array-index="0">Select</li><li class="active-result" data-option-array-index="1">Apple</li><li class="active-result" data-option-array-index="2">Mango</li><li class="active-result" data-option-array-index="3">Grapes</li><li class="active-result" data-option-array-index="4">Banana</li><li class="active-result" data-option-array-index="5">Guava</li>
</div>

注意:这是 div 下拉菜单

第二个下拉列表 xpath://*[@id='ddlFruit_N']/div/ul/li

我正在使用 C# 谢谢

标签: c#seleniumselenium-webdriver

解决方案


请尝试以下代码。我们将检查加载选项Div

public static IWebElement waitForDropdownPopulate(IWebDriver driver, By by, int delayInSeconds)
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(delayInSeconds));
    return wait.Until<IWebElement>(drv => 
    {
        IWebElement elementList = drv.FindElement(by);
elementList.Click();
        if (elementList.FindElements(By.XPath("./div/ul//li")).Count >= 2)
        {
            return elementList;
        }

        return null;
    }
    );
}

我这样称呼它:

Myclass.waitForDropdownPopulate(driver, By.XPath("//*[@id='ddlFruit_N']"), 30);

推荐阅读