You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium JavascriptExecutor修改带::before伪类的div文本值?

解决方法

首先要明确:::before伪元素是CSS渲染生成的,不属于DOM结构的一部分,无法直接通过Selenium或DOM API修改它的内容。你看到的伪元素文本其实是这个可编辑div的占位提示,核心操作应该针对实际的可输入元素——那个带contenteditable="true"的div.input。

直接操作可编辑元素

这个div支持直接输入,你可以通过两种方式向它写入内容:

方法1:使用Selenium原生API

定位到该元素后,直接调用sendKeys输入文本:

// 定位可编辑div元素
WebElement editableInput = driver.findElement(By.cssSelector("div.stb-LazyChosenDropdown div.tiles div.input"));
// 清空原有内容(如果有)
editableInput.clear();
// 输入新文本
editableInput.sendKeys("你的目标文本");

方法2:通过JavascriptExecutor设置

如果原生API遇到交互问题(比如元素状态异常),可以用JS直接修改元素的文本内容:

JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement editableInput = driver.findElement(By.cssSelector("div.stb-LazyChosenDropdown div.tiles div.input"));
// 清空并设置新文本
js.executeScript("arguments[0].textContent = '你的目标文本';", editableInput);
// 若需要富文本内容,可改用innerHTML:
// js.executeScript("arguments[0].innerHTML = '<span>格式化文本</span>';", editableInput);

关于伪元素的补充说明

如果确实需要修改伪元素的content(仅用于特殊测试场景),只能通过修改元素的CSS样式实现,前提是页面CSS支持动态覆盖:

// 用JS修改伪元素的content值
js.executeScript("document.querySelector('div.stb-LazyChosenDropdown div.tiles div.input').style.setProperty('content', '\"新的提示文本\"', 'important');");

但注意:这种修改只会改变伪元素的显示文本,不会影响可编辑区域的实际输入内容,通常不是你需要的操作。

内容的提问来源于stack exchange,提问作者Steerpike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:21