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

如何用Selenium WebDriver提取UI标签文本与data-tooltip数据?

解决Selenium C#获取label文本和data-tooltip属性的问题

我看了你的代码和HTML结构,问题主要出在元素定位错误和属性名称使用不当上,导致你根本没定位到目标的label元素,自然返回null。咱们一步步来修正:

先说说你的代码里的问题

  1. 定位路径错了:你先找By.ClassName("field"),再找By.ClassName("input"),但目标label是在field-group下的input-label类元素,完全没碰对地方。
  2. 属性名写错了:HTML里的提示属性是data-tooltip,但你用了name.GetAttribute("tooltip"),少了前缀,肯定拿不到值。
  3. 没处理label的文本提取:你的代码里完全没写获取Beta、Carbon Reduction这些文本的逻辑。

正确的实现方式

最直接的方法是直接定位到所有目标label元素,然后分别提取文本和属性值。这里给你两种写法,按需选择:

方法1:一次性获取文本和tooltip的组合列表

public static List<(string LabelText, string TooltipText)> GetFieldDetails()
{
    var fieldDetails = new List<(string, string)>();
    
    // 先定位到表单容器
    IWebElement formContainer = driver.FindElement(By.Id("param-list"));
    // 直接找到所有class为input-label的label元素
    IList<IWebElement> labelElements = formContainer.FindElements(By.ClassName("input-label"));
    
    foreach (var label in labelElements)
    {
        // 获取label的显示文本(Beta、Carbon Reduction)
        string labelText = label.Text;
        // 获取data-tooltip属性值,必须用完整的属性名
        string tooltipText = label.GetAttribute("data-tooltip");
        
        fieldDetails.Add((labelText, tooltipText));
    }
    
    return fieldDetails;
}

方法2:分开获取文本列表和tooltip列表

如果你需要单独的列表,可以拆成两个方法:

// 获取所有label文本
public static List<string> GetLabelTexts()
{
    var labelTexts = new List<string>();
    // 用CSS选择器直接定位,更简洁
    var labels = driver.FindElements(By.CssSelector("#param-list .input-label"));
    
    foreach (var label in labels)
    {
        labelTexts.Add(label.Text);
    }
    return labelTexts;
}

// 获取所有data-tooltip的值
public static List<string> GetTooltips()
{
    var tooltips = new List<string>();
    var labels = driver.FindElements(By.CssSelector("#param-list .input-label"));
    
    foreach (var label in labels)
    {
        tooltips.Add(label.GetAttribute("data-tooltip"));
    }
    return tooltips;
}

几个关键注意点

  • 定位精准:用#param-list .input-label这种CSS选择器可以直接定位到目标元素,减少中间层级的定位错误。
  • 属性名完整:自定义的data-*属性必须写全名称,比如data-tooltip,不能省略data-前缀。
  • 文本获取:如果label元素是隐藏的,label.Text可能返回空,这时候可以用label.GetAttribute("innerText")或者label.GetAttribute("textContent")来获取文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:09