无法在硒中找到预期的元素数量

Posted

技术标签:

【中文标题】无法在硒中找到预期的元素数量【英文标题】:Unable to find expected number of element in selenium 【发布时间】:2019-09-09 23:51:03 【问题描述】:

当通过 xpath '//*[contains(@id,'a')]' 使用检查元素搜索框在 chrome 中搜索元素时,找到的元素总数为 43,但在 selenium 代码中使用相同的 xpath 时,它会显示仅找到 37 个元素。

下面是硒代码。我什至尝试查看框架但仍然没有得到预期的结果

driver.get("http://facebook.com");
        //System.out.println(driver.findElements(By.tagName("iframe")).size());
        List<WebElement> a = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(a.size());
        driver.switchTo().frame(0);
        List<WebElement>b=driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(b.size());
        driver.switchTo().parentFrame();
        driver.switchTo().frame(1);
        List<WebElement>c=driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(c.size());
        driver.switchTo().parentFrame();

【问题讨论】:

这些元素是如何创建的?也许你需要让 selenium 等到所有元素都被创建。 Selenium get(url) 命令等到所有元素都加载完毕。所以不确定等待是选项 但也许这些元素正在通过 API 调用更新到其他地方。我也遇到过类似情况。 我是 Java 和 selenium 的新手,所以无法完全了解您提到的内容。但如果你说的是真的,那么解决方案是什么 试试这行代码。我们会弄清楚它是否是时机。 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 【参考方案1】:

您获得不同数量的节点的原因是 DOM 中有 iframe 元素。 iframe 中甚至还有一个 iframe

当您在 chrome 开发工具中搜索时,它会显示所有元素,包括框架内的元素。 但是当您使用 selenium 时,它不会访问框架内的 DOM。 这就是为什么你在硒中得到的元素更少。

当您切换框架时,实际上并不是在页面中所有可用的二级框架中搜索它。

我已经确定了缺失元素所在的帧。只是不要回到父框架并更深一层,你会找到所有元素。

试试下面的代码,它会给你想要的结果。

    driver.get("https://www.facebook.com");

    List<WebElement> list = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("Main Page: "+list.size());

    //driver.switchTo().frame("captcha-recaptcha");
    driver.switchTo().frame(0);
    List<WebElement> list2 = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("In the iFrame: "+list2.size());

    //driver.switchTo().frame(driver.findElement(By.cssSelector("body > div.g-recaptcha > div > div > iframe")));
    driver.switchTo().frame(0);
    List<WebElement> list3 = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("In the second iFrame: "+list3.size());

    System.out.println("Full count: "+(list.size()+list2.size()+list3.size()));

【讨论】:

非常感谢!它有帮助

以上是关于无法在硒中找到预期的元素数量的主要内容,如果未能解决你的问题,请参考以下文章

当元素包含多个类名时如何在硒中复制标签?

检测声音是不是在硒中播放

在硒中按电话键盘输入键

量角器测试不起作用

硒中没有此类元素异常,但该元素存在

如何在硒测试中设置html元素的样式显示?