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

如何统计动态页面上的webElements?爪哇硒

单于奇略
2023-03-14

我需要计算页面上的webElements。最初,它只打开几个元素,但是当你向下滚动时,会出现新元素。你不能使用ExpectedConditions.numberOfElementsToBeLessThan(),因为它不知道页面上会有多少元素。

要解决这个问题,我只需要让硒等待几秒钟,直到新的元素出现在DOM中。但是不允许使用线程睡眠。那么,我该如何解决这个问题?

共有2个答案

薛弘壮
2023-03-14

首先使用下面的代码继续滚动到页面结束,然后找到并计算总数

        By by = "your By";
        WebDriver webDriver = "driver isntance";
        Wait wait = new 
        FluentWait(webDriver).withTimeout(Duration.ofSeconds(30))
                .pollingEvery(Duration.ofMillis(250));
        long lastHeight = (long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.body.scrollHeight");
        while (true) {
            int currentcount = webDriver.findElements(by).size();
            ((JavascriptExecutor) webDriver)
                    .executeScript("window.scrollTo(0, document.body.scrollHeight);");
            try {
                wait.until(waitForCountToBeHigherThan(by, currentcount));
            } catch (TimeoutException e) {
                //Ignoring
            }
            long newHeight = (long) ((JavascriptExecutor) webDriver)
                    .executeScript("return document.body.scrollHeight");
            if (newHeight == lastHeight) {
                //No Height Change Breaking
                break;
            }
            lastHeight = newHeight;
        }
        List<WebElement> elements = webDriver.findElements(by);
        System.out.println(elements.size());

定义一个自定义的预期条件,如下所示,以等待元素计数大于当前值

public static ExpectedCondition<List<WebElement>> waitForCountToBeHigherThan(
            final By locator, final int elementsCount) {
        return new ExpectedCondition<List<WebElement>>() {
            @Override
            public List<WebElement> apply(WebDriver driver) {
                List<WebElement> elements = driver.findElements(locator);
                if (elements.size() < elementsCount) {
                    return null;
                }
                for (WebElement element : elements) {
                    if (!element.isDisplayed()) {
                        return null;
                    }
                }
                return elements;
            } 
        };
    }
井轶
2023-03-14

查找页面上上次加载的元素或更改其状态以指示页面内容已完全加载,并使用ExpectedConditions等待这些条件。

 类似资料:
  • 我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL

  • 当我运行程序而不是找到骑士之旅时,我收到了一个StackOverflow错误。任何想法是什么导致了这一点,以及我如何改变我的代码,实际上找到骑士之旅,并摆脱这个错误。项目是为我的CS280课程,并在周五到期,请帮助。谢谢!!

  • 一个能够让程序猿快速开发的炒鸡脚手架,核心技术Spring、JPA、Shiro。 基础环境 JDK1.8、Maven、Mysql、Redis、IntelliJ IDEA、minio、fastdfs 相关组件 - ok-admin - vue - iView - echarts - clipboard - cropperjs - lightbox - nprogress - webuploader

  • 大家好。我卡住了,不明白为什么代码会给我一个“错误”的答案。 我的任务是:编写一个程序,取数字并计数,直到用户输入“exit”,然后程序打印出用户刚刚插入的所有数字的摘要并停止。 我现在正在网上学习java,不知道该如何回答:当你输入1或2或3个或更多的数字时,它会计算并打印错误的结果,甚至代码无法编译并弹出一个错误。 例如。你放了2个数字,有一个错误 线程“main”java.lang.Numb