如何在Selenium Java中断言懒加载列表数据并获取场馆列表信息
在Selenium Java中处理懒加载列表并获取场馆数据
步骤1:循环滚动加载所有懒加载数据
单次滚动无法确保加载完所有内容,需要通过循环滚动+对比列表大小的方式,判断数据是否加载完毕:
// 初始化JavaScript执行器 JavascriptExecutor js = (JavascriptExecutor) driver; List<WebElement> hallList; int previousSize = 0; int currentSize; do { // 定位所有场馆元素(替换为实际页面的选择器) hallList = driver.findElements(By.cssSelector(".hall-item")); currentSize = hallList.size(); // 列表大小未变化,说明已加载全部数据 if (currentSize == previousSize) { break; } // 滚动到页面底部触发加载 js.executeScript("window.scrollTo(0, document.body.scrollHeight)"); // 显式等待新数据加载完成(比Thread.sleep更可靠) WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); wait.until(d -> d.findElements(By.cssSelector(".hall-item")).size() > previousSize); previousSize = currentSize; } while (true);
步骤2:获取列表大小并打印场馆数据
所有数据加载完成后,直接获取总数量并遍历打印每个场馆的信息:
// 打印场馆总数量 int totalHallCount = hallList.size(); System.out.println("场馆列表总数量:" + totalHallCount); // 遍历打印每个场馆的详细信息 for (WebElement hall : hallList) { // 获取场馆文本内容(可根据需求调整,比如获取特定属性值) String hallDetails = hall.getText(); System.out.println("场馆信息:" + hallDetails); // 示例:获取场馆ID属性 // String hallId = hall.getAttribute("data-hall-id"); // System.out.println("场馆ID:" + hallId); }
关键注意事项
- 必须将代码中的
".hall-item"替换为实际页面中单个场馆元素的CSS选择器或XPath,比如页面中每个场馆是<div class="hall-card">,就用By.cssSelector(".hall-card")。 - 优先使用显式等待替代
Thread.sleep,避免因网络延迟导致的判断误差。 - 滚动后如果没有新数据加载,循环会自动终止,不会无限执行。
内容的提问来源于stack exchange,提问作者Rutvij Patel
相关产品推荐
相关产品推荐

