【问题标题】:How to get window using TestStack.White如何使用 TestStack.White 获取窗口
【发布时间】:2016-12-16 01:19:28
【问题描述】:

我已经通过调用获得了顶层窗口:

Window win = Desktop.Instance.Windows().Find(...);

但是获取子窗口时出现异常:

IUIItem item = win.Get(SearchCriteria.ByText("The Name"));

“TestStack.White.AutomationException”类型的未处理异常 发生在TestStack.White.dll

附加信息:无法获取 Name=The Name

来自 Inspect.exe 的子窗口信息:

Name:                                 "The Name"
ControlType:                          UIA_PaneControlTypeId (0xC371)
LocalizedControlType:                 "Dialog"
BoundingRectangle:                    {l:96 t:38 r:1917 b:1078}
IsEnabled:                            true
IsKeyboardFocusable:                  false
HasKeyboardFocus:                     false
ProcessId:                            15496
RuntimeId:                            [2A.140BD8]
FrameworkId:                          "Win32"
ClassName:                            "#32770"
NativeWindowHandle:                   0x140BD8
IsControlElement:                     false
IsContentElement:                     false
ProviderDescription:                  "[pid:14492,hwnd:0x140BD8 Main:Microsoft: Container Proxy (unmanaged:uiautomationcore.dll); Nonclient:Microsoft: Non-Client Proxy (unmanaged:uiautomationcore.dll); Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
LegacyIAccessible.ChildId:            0
LegacyIAccessible.Name:               "The Name"
LegacyIAccessible.Role:               Dialog (0x12)
LegacyIAccessible.State:               (0x100000)
IsAnnotationPatternAvailable:         false
IsDragPatternAvailable:               false
IsDockPatternAvailable:               false
IsDropTargetPatternAvailable:         false
IsExpandCollapsePatternAvailable:     false
IsGridItemPatternAvailable:           false
IsGridPatternAvailable:               false
IsInvokePatternAvailable:             false
IsItemContainerPatternAvailable:      false
IsLegacyIAccessiblePatternAvailable:  true
IsMultipleViewPatternAvailable:       false
IsObjectModelPatternAvailable:        false
IsRangeValuePatternAvailable:         false
IsScrollItemPatternAvailable:         false
IsScrollPatternAvailable:             false
IsSelectionItemPatternAvailable:      false
IsSelectionPatternAvailable:          false
IsSpreadsheetItemPatternAvailable:    false
IsSpreadsheetPatternAvailable:        false
IsStylesPatternAvailable:             false
IsSynchronizedInputPatternAvailable:  false
IsTableItemPatternAvailable:          false
IsTablePatternAvailable:              false
IsTextChildPatternAvailable:          false
IsTextEditPatternAvailable:           false
IsTextPatternAvailable:               false
IsTextPattern2Available:              false
IsTogglePatternAvailable:             false
IsTransformPatternAvailable:          false
IsTransform2PatternAvailable:         false
IsValuePatternAvailable:              false
IsVirtualizedItemPatternAvailable:    false
IsWindowPatternAvailable:             false

我没有从 TestStack.White https://github.com/TestStack/White 找到太多信息。 我怀疑这是因为子窗口不是自动化控件。

【问题讨论】:

    标签: c# ui-automation


    【解决方案1】:

    首先,查找所有桌面窗口并不是一个好主意。您应该启动您的应用程序并提供应用程序路径:

    TestStack.White.Application app = TestStack.White.Application.Launch(applicatonFullPath);
    

    然后你应该得到你的应用程序的主窗口:

    mainWinDow = app.GetWindows().FirstOrDefault(w => w.Name == "YOUR MAIN WINDOW NAME");
    

    您的子窗口可能是一个模态窗口。你可以像他一样得到它:

    var modalWindows = mainWinDow.ModalWindows();
    
    modalWindow = modalWindows.Where(x => x.Name == "The Name").FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 2016-04-20
      • 2014-12-26
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      相关资源
      最近更新 更多