如何使用Selenium WebDriver统计class为a-pagination的ul元素下的li元素总数(需返回结果20)
问题:统计指定ul下的实际分页总数(应为20)
我碰到个小难题:需要统计某ul元素对应的分页总页数,实际应该是20页,但DOM里渲染出来的li元素数量不到20(因为有省略号占位)。而且页面里还有其他无关的li元素,得让Selenium只盯着这个特定ul来处理。
对应的HTML结构是这样的:
<ul class="a-pagination"> <li class="a-disabled">←<span class="a-letter-space"></span><span class="a-letter-space"></span>Previous</li> <li class="a-selected"><a href="ff" aria-current="page">1</a></li> <li class="a-normal"><a href="www">2</a></li> <li class="a-normal"><a href="ddddddddddd">3</a></li> <li class="a-disabled" aria-disabled="true">...</li> <li class="a-disabled" aria-disabled="true">20</li> <li class="a-last"><a href="/">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li> </ul>
我已经写了部分代码,但不知道该用什么定位器:
List<WebElement> list1 = driver.findElements("not sure what will go here"); System.out.println("\nsize" + list1.size() );
请问该用什么定位器,才能让结果返回正确的总数20?
解决方案
嘿,我来帮你理清楚~首先得明确:DOM里显示的li只有7个,但实际总页数是20,这是因为分页控件做了简化渲染,只展示了前几页、省略号、最后一页和切换按钮,并没有把20页都做成li元素。所以直接统计li的数量肯定得不到20,得换个思路:提取那个显示最后页码(也就是"20")的li元素的文本内容。
具体实现方式
因为你需要确保只针对class="a-pagination"的ul操作,所以所有定位器都要以这个ul为父节点,避免误选其他ul下的元素。
方式1:CSS选择器
直接定位到这个ul下倒数第二个li(也就是显示"20"的那个):
// 先定位到目标ul,再找它下面的倒数第二个li WebElement lastPageItem = driver.findElement(By.cssSelector("ul.a-pagination li:nth-last-child(2)")); // 提取文本并转成数字 int totalPages = Integer.parseInt(lastPageItem.getText().trim()); System.out.println("\ntotal pages: " + totalPages);
方式2:XPath
用XPath也能轻松定位到目标元素,两种写法都可以:
// 写法1:直接找ul下包含文本"20"的li WebElement lastPageItem = driver.findElement(By.xpath("//ul[@class='a-pagination']//li[text()='20']")); // 写法2:找ul下倒数第二个li(更通用,就算页码变了也能用) // WebElement lastPageItem = driver.findElement(By.xpath("//ul[@class='a-pagination']/li[position()=last()-1]")); int totalPages = Integer.parseInt(lastPageItem.getText().trim()); System.out.println("\ntotal pages: " + totalPages);
为什么不能直接统计li的size?
再强调一下:这个分页控件是“折叠”显示的,只有当前可见的页码和前后按钮、省略号会被渲染成li元素,实际的20个页码并没有全部生成DOM节点,所以list1.size()最多只能得到7,永远拿不到20。所以必须通过提取最后一个显示的页码文本才能得到正确总数。
内容的提问来源于stack exchange,提问作者MCD
相关产品推荐
相关产品推荐

