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

能否为Microsoft Bot的Signin Card添加自定义HTML类/ID以支持Selenium测试?

解决Teams中Signin Card按钮的Selenium定位问题

方案一:给CardAction添加自定义测试属性

Bot Framework的CardAction类提供了Properties字典,可用来添加自定义键值对,包括Teams在内的多数渠道会将这些属性映射到渲染后的HTML元素上。你可以给按钮添加测试专用标识,比如data-testid:

var signinButton = new CardAction(
    ActionTypes.OpenUrl, 
    "This way to Sign-in", 
    value: endPoint, 
    text: $"Copy {loginUrl} into browser if it does not open"
);
// 添加自定义测试ID
signinButton.Properties.Add("data-testid", "signin-card-auth-button");

var signinCard = new SigninCard
{
  Text = "Test Sign-in Card",
  Buttons = new List<CardAction> { signinButton },
};

渲染完成后,Selenium即可通过这个自定义属性精准定位:

// C# Selenium示例代码
var signinButton = driver.FindElement(By.CssSelector("[data-testid='signin-card-auth-button']"));

方案二:基于现有属性的替代定位策略

如果自定义属性无法生效,可根据按钮的现有特征组合定位:

  • 按按钮文本定位:直接匹配按钮显示的主文本(区分完全匹配和模糊匹配场景)
    // 完全匹配文本
    driver.FindElement(By.XPath("//button[text()='This way to Sign-in']"));
    // 模糊匹配(适配文本含空格或换行的情况)
    driver.FindElement(By.XPath("//button[contains(text(),'This way to Sign-in')]"));
    
  • 按链接地址定位:利用按钮的value(跳转链接)特征定位
    driver.FindElement(By.CssSelector($"a[href*='{endPoint}']"));
    
    注:Teams中Signin按钮可能渲染为<a>或<button>标签,需通过开发者工具确认实际DOM结构。
  • 按卡片上下文定位:先定位Signin Card的容器,再嵌套查找按钮,避免页面其他相似按钮干扰
    driver.FindElement(By.XPath("//div[contains(text(),'Test Sign-in Card')]/..//button"));
    

额外建议

在Teams Web版中打开开发者工具(F12),直接查看Signin Card渲染后的HTML结构,确认按钮的实际标签、类名或其他属性。比如Teams通常会给卡片按钮添加统一类名(如ts-btn),结合文本或链接特征可写出更稳定的定位器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:33