【问题标题】:Finding a desktop window by class in White在白色中按班级查找桌面窗口
【发布时间】:2017-12-07 18:57:28
【问题描述】:

我正在使用 White 构建一个自动化测试套件。我需要做的一件事是单击系统升级通知区域中的图标(开始栏的右下角)。不过,我很难向怀特识别它。使用 Spy++,我发现它在窗口深处嵌套了三层,没有要搜索的标题,这是 White 识别窗口的正常方式。因此,我试图按类找到正确的窗口。

根据 Spy++,我首先需要获取窗口 10042,它具有类“Shell_TrayWnd”。然后是它的子窗口 10048,类 TrayNotifyWnd,最后是系统提升通知区域,窗口 1005E,类 ToolbarWindow32。从this 回答中得到一些提示,我尝试了以下代码:

win=Desktop.Instance.Get<Window>(SearchCriteria.ByNativeProperty(AutomationElement.ClassNameProperty, "Shell_TrayWnd"));

但是当我尝试运行它时,我记录了这个错误(原文如此):

Exception: Error occured while geting (),AutomationElementIdentifiers.ClassNameProperty=Shell_TrayWnd

有什么想法吗?

编辑:我更改了错误日志记录,因此我得到了完整的回溯,而不仅仅是异常消息,并找到了System.ArgumentException: Must specify at least two conditions.

所以我将代码修改为

win = Desktop.Instance.Get<Window>(SearchCriteria.ByClassName("Shell_TrayWnd").AndIndex(0));

但尽管我指定了两个条件,但它仍然给出完全相同的错误消息。

Exception: TestStack.White.WhiteException: Error occured while geting (),ClassName=Shell_TrayWnd,Index=0 ---&gt; System.ArgumentException: Must specify at least two conditions.

【问题讨论】:

  • 您找到解决方案了吗?我尝试了您的方法和@Rescis,但我收到了相同的错误消息。想法?
  • 不,我最终把它留到以后,从来没有考虑过。目前,这部分测试仍然必须手动完成。我本来打算在某个时候尝试 Rescis 的解决方案,但我被其他项目牵制了,再也没有回去。

标签: c# automation automated-tests white-framework


【解决方案1】:

在白色 UI 自动化中,SearchCriteriaSearchConditions 之间存在区别。 SearchConditions 由框架内部使用,而标准作为参数在外部添加,然后在内部转换为条件(然后进一步转换为 Microsoft UIAutomation 框架)。

如果您将搜索条件更改为

SearchCriteria.ByClassName("Shell_TrayWn").NotIdentifiedByText(String.Empty)

它将停止抛出错误。

这是因为它默认将按名称/文本搜索的所有内容作为搜索条件,并抛出不相关的错误消息(它应该是带有“必须指定名称/文本条件”的消息的 ArgumentException ")

【讨论】:

  • 为我抛出了同样的异常(v 0.13.3)。这是他们回购中的问题:github.com/TestStack/White/issues/526 - 也没有解决方案。
  • @RuNe 作为一个 FYI,其发布者最近找到了解决方案。
  • 如果是关于弹出窗口的:在其他上下文中也会抛出异常。如果没有,解决方案在哪里? :)
  • @RuNe Dohh,我不知道前几天我在看什么。我想我有几个问题,并且正在寻找错误的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多