使用Selenium Webdriver无法读取被省略号隐藏的完整文本如何解决
你当前的代码存在两个核心问题:
- 调用
getCssValue("text-overflow")仅能获取元素的文本溢出CSS配置项,和你要获取商品完整名称的需求完全不匹配,自然得不到预期结果。 - 所用CSS选择器层级嵌套过深、未限定查询范围,很容易匹配到页面其他区域的商品名称元素,稳定性极差。
1. 先验证定位器有效性
优化定位逻辑,限定仅在「为你推荐」模块内查询商品名称,避免匹配到其他区域的元素:
div[data-qa='recommended-products'] div[data-qa='product-name'] span:first-child
匹配到元素后先调用getText()打印,确认输出为截断后的U-HOOME Push Pop Bubble Fidget Sensor…,即说明定位正确。
2. 获取完整商品名称
按优先级从高到低给你三个可行方案:
方案1:读取title属性
绝大多数站点做文本省略处理时,都会将完整文本预先存入元素的title属性(悬停显示的内容就是该属性值),无需任何交互即可直接读取:
WebElement productNameEle = driver.findElement(By.cssSelector("div[data-qa='recommended-products'] div[data-qa='product-name'] span:first-child")); String fullName = productNameEle.getAttribute("title"); System.out.println(fullName);
方案2:读取内置文本属性
CSS截断仅为视觉层的展示处理,元素本身的textContent属性中仍存储了完整文本,直接读取即可:
String fullName = productNameEle.getAttribute("textContent").trim(); System.out.println(fullName);
方案3:模拟悬停后读取
如果前两种方案都失效,再通过Actions类模拟鼠标悬停触发文本展示后读取:
Actions actions = new Actions(driver); actions.moveToElement(productNameEle).perform(); // 生产环境建议替换为显式等待,此处sleep仅做示例 Thread.sleep(300); String fullName = productNameEle.getText(); System.out.println(fullName);
内容的提问来源于stack exchange,提问作者Pratik Pathare
相关产品推荐
相关产品推荐

