UI 自动化 - 如何区分正在显示的图像

Posted

技术标签:

【中文标题】UI 自动化 - 如何区分正在显示的图像【英文标题】:UI Automation - How to distinguish image being displayed 【发布时间】:2018-04-23 03:46:00 【问题描述】:

我对 UI 自动化和使用 Inspect 工具(Inspect.exe Microsoft 工具)非常陌生,所以请解释一下。

我有一个显示列表视图的 UWP 应用程序,每个列表视图项看起来像这样

上面图像块中的小圆圈是内部颜色图像,它是一个纯色圆圈(黑色、灰色或棕色)。

如果我使用 Inspect.exe 工具并将鼠标悬停在小圆圈 InteriorColor Image 上,它会显示 AutomationId = InteriorColorIcon 这是我在 XAML 中给它的名称:

<Image x:Name="InteriorColorIcon" Source="Binding InteriorColor, Converter=Static Resource InteriorColorImageConverter"

以上,可绑定属性InteriorColor是字符串类型,我使用转换器将该字符串转换为正确颜色的图像。

所以,如果 InteriorColor == "black",我的转换器会返回资源图像 Black.png,如:

return new BitmapImage(new Uri("ms-appx:///Black.png"));

我想编写 UI 自动化来检测小圆圈 InteriorColorIcon 图像是否是正确颜色的图像。如果我将鼠标悬停在 Inspect.exe 工具中的图像上,它会显示它的 AutomationId = InteriorColorIcon,这很好。

但是我如何确认图像是黑色、灰色还是棕色?

有没有办法以某种方式向 XAML 中的图像添加一个属性,让 Inspect 工具可以看到并且我可以在我的 UI 测试中使用该属性来验证显示的图像是正确的图像?

我认为检测颜色会很困难,但是有没有办法添加一个字符串属性或类似的东西可以用于此目的?

【问题讨论】:

【参考方案1】:

始终为图像设置 AutomationProperties.Name。这是从屏幕阅读器正确读取图像所必需的。自动化名称为“InteriorColorIcon”是您的应用程序中的一个可访问性错误。它应该更具描述性,例如“黑色图像”(或黑色图像所表示的任何内容)。同样,您可以将 AutomationProperties.AutomationId 设置为对您的测试有用的东西。

见Expose basic accessibility information

<Image x:Name="InteriorColorIcon"
       AutomationProperties.Id="Binding InteriorColor"
       AutomationProperties.Name="Binding InteriorColor, Converter=Static Resource InteriorColorDescriptiveNameConverter"
       Source="Binding InteriorColor, Converter=Static Resource InteriorColorImageConverter"

如果您想检查实际图像,那就更难了。您需要截屏图像的位置(请参阅 UIA_BoundingRectanglePropertyId),然后将捕获的像素与参考图像进行比较。

【讨论】:

以上是关于UI 自动化 - 如何区分正在显示的图像的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Ajax 自动完成区分大小写 ASP.net MVC

自动滚动:如何在滚动视图中自动滚动图像

如何使用 JavaScript 在 UI 自动化中访问 actionSheet(及其按钮)?

如何识别 Android App 是不是在自动化 ui 测试中?

jQuery 自动完成:如何显示动画 gif 加载图像

用vue element ui区分用户输入和数据变化