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

如何通过Java Selenium获取WebElement的aria-label属性值?

解决Java Selenium获取aria-label属性值返回null的问题

问题分析

从你提供的HTML和属性打印结果来看,当前持有的WebElement并非带有aria-label="2001"的<td>节点:

  • 原HTML中<td>的class是mat-calendar-body-cell ng-star-inserted
  • 你打印的元素class却是mat-calendar-body-cell-container ng-star-inserted

这说明你定位到的是<td>内部的子容器元素,而非目标<td>本身,所以各种Selenium属性获取方法都返回null。

解决方案

1. 定位到正确的<td>元素

调整定位策略,直接定位带有aria-label的目标<td>,比如结合data-mat-row和data-mat-col属性精准定位:

// 定位目标td节点
WebElement targetTd = driver.findElement(By.cssSelector("td[data-mat-row='0'][data-mat-col='0']"));
// 获取aria-label值
String ariaLabel = targetTd.getAttribute("aria-label");

2. 用JavaScript强制读取属性

如果确认已定位到正确元素但Selenium原生方法失效,通过JavaScript执行器直接读取DOM属性:

JavascriptExecutor js = (JavascriptExecutor) driver;
String ariaLabel = (String) js.executeScript(
    "return arguments[0].getAttribute('aria-label');", targetTd);

3. 检查元素是否在iframe/Shadow DOM中

  • iframe场景:若目标<td>在iframe内,需先切换到对应iframe再定位元素:
    // 切换到iframe(可通过id、name或WebElement定位)
    driver.switchTo().frame("iframe-container-id");
    // 再执行定位和属性获取操作
    
  • Shadow DOM场景:若元素处于Shadow DOM中,需通过JavaScript穿透Shadow DOM访问:
    String ariaLabel = (String) js.executeScript(
        "return document.querySelector('td[data-mat-row=\"0\"][data-mat-col=\"0\"]').getAttribute('aria-label');");
    
    注:若Shadow DOM嵌套更深,需调整脚本中的选择器路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:11