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

如何在Appium中使用正则表达式识别动态名称的WPF应用窗口?

解决Appium识别动态名称WPF窗口的问题

嗨,针对你遇到的动态窗口名称识别问题,有几个实用的方法可以不用硬编码版本号就能定位到目标窗口,我给你详细说说:

方法一:用XPath的starts-with函数(最简单高效)

因为你的窗口名称是固定前缀ABC加可变版本号,直接用XPath的starts-with函数匹配名称开头就能准确定位,这种方式兼容性好,而且是在驱动层面筛选,性能也不错:

// 定位以ABC开头的Window元素
var targetWindow = driver.FindElement(By.XPath("//Window[starts-with(@Name, 'ABC')]"));

如果你的窗口识别属性不是Name而是Title(有些WPF窗口的标题属性是Title),只需要把@Name换成@Title就行:

var targetWindow = driver.FindElement(By.XPath("//Window[starts-with(@Title, 'ABC')]"));

方法二:用正则表达式筛选(更灵活)

如果你需要更严格的匹配(比如确保版本号是x.x.x的格式),可以先获取所有窗口元素,再在C#代码里用正则表达式筛选:

using System.Text.RegularExpressions;

// 获取所有Window元素
var allWindows = driver.FindElements(By.XPath("//Window"));
// 定义正则:匹配ABC开头,后面跟着数字.数字.数字的格式
Regex windowNamePattern = new Regex(@"^ABC\d+\.\d+\.\d+$");

// 筛选符合条件的窗口
var targetWindow = allWindows.FirstOrDefault(window => 
    windowNamePattern.IsMatch(window.GetAttribute("Name")));

if (targetWindow != null)
{
    // 找到目标窗口,执行后续自动化操作
}

注意事项

  • 确保你的Appium Windows Driver是最新版本,这样对XPath语法和元素属性的支持更完善;
  • 如果你的应用同时打开了多个以ABC开头的窗口,建议结合其他属性(比如窗口的Class Name)来缩小筛选范围,避免定位错误;
  • 优先使用方法一,因为它不需要在客户端遍历所有元素,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:47