什么是“隐式搜索”,它是如何工作的?

时间:2014-09-30 20:33:22

标签: c# coded-ui-tests

在编码用户界面中,有一些方法可以在播放期间等待特定事件,例如WaitForControlEnabled()WaitForControlEnabled()。根据{{​​3}}:

  

所有这些方法都有以下行为:

     
      
  • 如果等待成功,则方法返回true,如果等待失败,则返回false。
  •   
  • 等待操作的隐式超时由WaitForReadyTimeout属性指定。此属性的默认值为60000毫秒(一分钟)。
  •   
  • 这些方法有一个重载,以毫秒为单位显式超时。 但是,当等待操作导致隐式搜索控件时,或者当应用程序繁忙时,实际等待时间可能超过指定的超时时间。
  •   

我的问题是,究竟是什么"隐含搜索"是否可以完全禁用它,或者如果它发生在详细日志中显示它?

我无法在任何官方消息来源中找到解释。根据我的理解,隐式搜索是当回放引擎无法找到确切的UI控件时执行的搜索。但是,它与SmartMatch不同,因为即使我已禁用SmartMatch

Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.None;

隐式搜索仍然发生。我知道这一点,因为我故意为UI控件的搜索属性指定了一个非精确值,但仍然找到了控件。花了很长时间,当我查看详细日志时,没有提到SmartMatch,也没有任何警告。

1 个答案:

答案 0 :(得分:3)

考虑表达式this.UIMap.UIOne.UITwo.UIThree。要访问已找到UIThree控件需要UITwo并找到它,需要找到UIOneUIOneUITwo的查找是隐式查找。

另一种方法是编写语句:

this.UIMap.UIOne.Find();
this.UIMap.UIOne.UITwo.Find();
... this.UIMap.UIOne.UITwo.UIThree ...

问题陈述:

  

根据我的理解,隐式搜索是一种搜索   当播放引擎找不到确切的UI控件时执行。

这是一种错误的解释。隐式搜索涉及在具有由点链接的多个属性的表达式中查找更高级别的控件。当无法找到完全匹配时,可以调用智能匹配。当使用诸如this.UIMap.UIOne.UITwo.UIThree之类的表达式时,可能会为三个控件中的每一个使用智能匹配。