如何在 Selenium 中对表格列内容进行倒序排列

冬杰君_3393

冬杰君_3393

2026-09-03

771人浏览

原创

如何在 Selenium 中对表格列内容进行倒序排列

本文介绍如何在 selenium webdriver 中获取 html 表格某一列的文本内容,并按倒序(降序)输出,重点解决“点击列头排序后仍按原始 dom 顺序读取”的常见误区。

本文介绍如何在 selenium webdriver 中获取 html 表格某一列的文本内容,并按倒序(降序)输出,重点解决“点击列头排序后仍按原始 dom 顺序读取”的常见误区。

在使用 Selenium 自动化测试 Web 表格时,一个典型需求是:模拟用户点击表头(如“Name”列)触发前端排序,再验证排序结果是否为倒序(Z→A)。但许多初学者会发现:即使页面上已显示倒序,用 findElements(By.xpath("//tr/td[2]")) 获取的 List<webelement></webelement> 仍是按 DOM 文档流顺序(即 <table> 中 <code><tr> 的原始<a style="color:#f60; text-decoration:underline;" title="排列" href="https://m.php.cn/zt/56129.html" target="_blank">排列</a>)返回的 —— 这与视觉呈现顺序无关,而是与 HTML 结构中元素的实际位置一致。<p>因此,<strong>单纯点击排序按钮并不会改变 DOM 顺序</strong>;前端通常通过 CSS 类切换、动态重排或虚拟滚动等方式更新视图,但 Selenium 默认读取的是当前 DOM 树结构中的节点顺序。若前端未真正重排 DOM(例如仅修改样式或使用 JavaScript 渲染),则需手动对提取的文本列表进行逻辑倒序。</p> <p>✅ 正确做法是:先确保排序操作完成(加入显式等待),再提取列文本,最后使用 Java 集合工具类进行倒序处理:</p> <pre class="brush:php;toolbar:false;">public void sortPrincipalNameColumn() { loginPage.getSampleURL(); loginPage.loginAction(&quot;hello&quot;, &quot;password&quot;); // 点击 Name 列表头(触发倒序排序) WebElement nameHeader = driver.findElement(By.xpath(&quot;//*[@id=\&quot;principals-table\&quot;]/thead/tr/th[2]&quot;)); nameHeader.click(); // 显式等待:确保排序动画/数据加载完成(可根据实际调整条件) WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.stalenessOf(nameHeader)); // 或等待某行内容变化 wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(&quot;//tr[2]/td[2]&quot;))); // 提取第二列(Name 列)所有单元格文本 List&lt;webelement&gt; nameCells = driver.findElements(By.xpath(&quot;//tbody/tr/td[2]&quot;)); // 建议限定 tbody 提高健壮性 List&lt;string&gt; names = new ArrayList(); for (WebElement cell : nameCells) { names.add(cell.getText().trim()); } // 关键步骤:对已提取的字符串列表执行倒序 Collections.reverse(names); System.out.println(&quot;倒序后的姓名列表:&quot; + names); }&lt;/string&gt;&lt;/webelement&gt;</pre> <p>⚠️ 注意事项:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/js/1451" title="jQuery+CSS3 3D立体图片排列布局代码"><img src="https://img.php.cn/upload/jscode/000/000/001/59ba1e7f4e893977.jpg" alt="jQuery+CSS3 3D立体图片排列布局代码" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/js/1451" title="jQuery+CSS3 3D立体图片排列布局代码" class="overflowclass">jQuery+CSS3 3D立体图片排列布局代码</a> <p class="overflowclass">jQuery+CSS3 3D立体图片排列布局代码</p> </div> <a rel="nofollow" href="/xiazai/js/1451" title="jQuery+CSS3 3D立体图片排列布局代码" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <ul> <li> <strong>勿依赖 DOM 顺序等于视觉顺序</strong>:现代前端框架(React/Vue/Angular)常采用虚拟 DOM 或动态渲染,DOM 节点物理顺序未必反映 UI 排序结果;</li> <li> <strong>增强定位鲁棒性</strong>:推荐使用 <code>//tbody/tr/td[2] 替代 //tr/td[2],避免匹配到表头(<th>)或分页栏等干扰项;<li> <strong>排序状态确认</strong>:可结合 <code>getAttribute("class") 或 getCssValue("order") 检查表头是否已标记为“desc”,或断言首尾元素是否符合倒序特征(如 Assert.assertTrue(names.get(0).compareTo(names.get(names.size()-1)) > 0));

  • 空值与空白处理:调用 .getText().trim() 防止前后空格影响排序逻辑;
  • 若需真正按字母降序排序(而非仅反转当前顺序),应使用 names.sort(Collections.reverseOrder())。
  • 总结:Selenium 读取的是 DOM 快照,不是渲染快照。要验证倒序结果,核心在于「先稳定页面状态 → 再提取 → 最后逻辑排序」。Collections.reverse() 是最直接有效的解决方案,适用于已知前端仅切换排序方向但未重排 DOM 的场景。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    排列

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    java
    java

    Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.15

    9597

    6

    java正则表达式语法
    java正则表达式语法

    java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

    2023.07.05

    6762

    9

    java自学难吗
    java自学难吗

    Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

    2023.07.31

    5992

    8

    java配置jdk环境变量
    java配置jdk环境变量

    Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.08.01

    1044

    3

    java保留两位小数
    java保留两位小数

    Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.08.02

    868

    3

    java基本数据类型
    java基本数据类型

    java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.02

    1276

    5

    java有什么用
    java有什么用

    java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.02

    2509

    5

    java在线网站
    java在线网站

    Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

    2023.08.03

    19851

    3

    配置java环境变量
    配置java环境变量

    配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

    2023.08.03

    1135

    8

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    热门推荐
    /
    最新课程
    phpStudy极速入门视频教程
    phpStudy极速入门视频教程

    共6课时 | 54.6万人学习

    独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程

    共89课时 | 133.4万人学习