Selenium 遇见伪元素该如何处理,快点学起来吧

本文介绍了如何使用Selenium处理前端页面中的伪元素,如`:before`和`::after`。通过Chrome的开发者工具查看元素样式,发现文本通过CSS的content属性设置。针对这种情况,可以通过定位伪元素的父元素,然后提取JavaScript中的content属性来获取文本。文章以百度疫情大数据平台为例,展示了具体的操作步骤。

前言

今天我们来说说Selenium 遇见伪元素该如何处理,废话不多说,咱们直接开始。喜欢的记得关注涂九哟。

问题发生

在很多前端页面中,大家会见到很多::before、::after 元素,比如【百度流量研究院】:

比如【百度疫情大数据平台】:

以【百度疫情大数据平台】为例,“累计确诊”文本并没有显示在 HTML 源代码中,如果通过常规的 xpath 元素定位方式是没办法的,因为“累计确诊”文本并不存在当前页面 dom 树中。

如何处理?

我们要弄清楚的是该元素的特殊之处,文本究竟存放在哪?

其实很简单,通过 Chrome 的 F12,我们将 style 选项展示出来:

可以看到元素的文本保存在 CSS 样式里面,通过 conten

在使用 Selenium 进行自动化测试时,处理伪元素(如 CSS 中的 `::before` 和 `::after`)是一个常见的挑战。伪元素是由 CSS 生成的内容,它们并不存在于 DOM 中,因此无法直接通过常规的 Selenium 方法进行操作或获取。然而,可以通过 JavaScript 来访问这些伪元素的样式和内容。 ### 获取伪元素的 `content` 属性 由于伪元素的内容是由 CSS 的 `content` 属性定义的,并且这些内容不会出现在 DOM 中,Selenium 本身并不支持直接访问这些内容。不过,可以通过执行 JavaScript 代码来获取伪元素的 `content` 属性值。以下是一个使用 Java 和 Selenium 的示例: ```java JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; String script = "return window.getComputedStyle(document.querySelector('#elementId'), '::before').getPropertyValue('content');"; String content = (String) jsExecutor.executeScript(script); System.out.println("Content of ::before pseudo-element: " + content); ``` 在这个例子中,`document.querySelector('#elementId')` 用于选择目标元素,而 `::before` 表示我们想要获取该元素的 `::before` 伪元素的样式信息。通过调用 `window.getComputedStyle()` 方法,可以获得计算后的样式值,然后使用 `getPropertyValue('content')` 来获取 `content` 属性的具体值[^3]。 ### 操作伪元素的样式 除了获取伪元素的 `content` 属性之外,还可以通过 JavaScript 来修改伪元素的样式。例如,可以通过以下方式更改 `::before` 伪元素的颜色: ```java String script = "var style = document.createElement('style');" + "style.type = 'text/css';" + "style.innerHTML = '#elementId::before { color: red !important; }';" + "document.head.appendChild(style);"; ((JavascriptExecutor) driver).executeScript(script); ``` 这段代码创建了一个新的 `<style>` 元素,并为其添加了针对 `::before` 伪元素的新样式规则,然后将这个 `<style>` 元素添加到文档的 `<head>` 部分,从而实现了对伪元素样式的修改。 ### 注意事项 - **伪元素不可交互**:由于伪元素并不是实际存在于 DOM 中的节点,因此不能直接对它们进行点击、输入等交互操作。 - **兼容性和性能**:使用 JavaScript 来操作和获取伪元素可能会受到浏览器兼容性的影响,同时也可能对页面性能产生一定影响。 通过上述方法,可以在一定程度上克服 Selenium处理伪元素时的限制,从而更有效地进行自动化测试。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值