当前位置: 首页 > 知识库问答 >
问题:

如何等待使用selenium webdriver加载div下拉列表?

羊舌子瑜
2023-03-14

页面上有两个下拉菜单。

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

这是我的问题,我怎么能等待第二个下拉列表完全加载硒网络驱动程序。

<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#谢谢

共有2个答案

徐涵亮
2023-03-14

尝试以下代码

var items = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='ddlFruit_N']/div/ul/li")))
        .FindElements(By.XPath("//*[@id='ddlFruit_N']/div/ul/li"));

要使用seleniumExtras库,请从NugetPackage安装DotNetSeleniumExtras.WaitHelpers

姬飞飙
2023-03-14

请尝试下面的代码。我们将检查要加载到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);
 类似资料:
  • 如何使SeleniumWebDriver在只有src属性的情况下等待iframe完全加载。我试图创建一个测试用例,其中包含表单元素的iframe从不同的源加载,而切换到此iframe时,此iframe的内容不可用,因此测试失败。因此,我如何使Webdriver等待iframe完全加载。

  • 我想等待页面完全加载。我知道我可以通过等待页面元素加载来做到这一点。 但是我想要更通用的东西,我假设可以使用Favicon来确定页面是否已完全加载。 如何使用Selenium Webdriver确定FavIcon是否已加载到页面中? “我知道这只是你的HTML源代码中的另一个元素。但是如果你查看任何网页上的页面加载,Favicon将是最后一个被加载的。如果有一种方法可以等到Favicon加载到网页

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

  • 我试图创建一个等待加载页面的方法,但我出现了一个错误。可能我没有正确使用这个方法。 错误是:

  • 我正在使用selenium web驱动程序3.4.0查找网站的响应时间。在较早的版本中,我使用了WebDriver wait=new WebDriverWait(driver,10);Wait.Until(ExpectedConditions.VisibilityOfElementLocated(By.id(“myid”)));查找加载的页面。 但这两行代码不适用于版本3.4.0。有没有其他方法可

  • 我开发网络爬虫有一段时间了,对我来说最常见的问题是等待页面完全加载,包括请求,框架,脚本。我是说彻底结束了。 我使用了几种方法来修复它,但当我使用多个线程来抓取网站时,我总是遇到这种问题。驱动程序打开自己,通过URL,不等待并通过下一个URL。 我的尝试是: wait . until(expected conditions . visibilityofelementlocated(by . XPa