1

尝试了每个列出的选项,但在使用白色的窗格控件中找不到功能区。尽管 VisualUIAVerify 将其显示在树中。

"window" "Test 0.0.1" "MainForm"
  |--"pane" "Dock Top" "_MainForm_Toolbars_Dock_Area_Top"
    |--"" "Ribbon" ""
      |--"tab" "Ribbon Tabs" ""
        |--"tab item" "Tools" ""

我想自动单击选项卡项“工具”。但只能找到一个“窗格”

import clr
import sys
sys.path.append(r"C:\TEMP\white")
clr.AddReference("White.Core")
clr.AddReference("White.NUnit")
from White.NUnit import *
from White import *
from White.Core import *
from White.Core.Configuration import *
from White.Core.UIItems import *
from White.Core.UIItems.WindowItems import *
from White.Core.UIItems.ListBoxItems import *
from White.Core.UIItems.Container import *
from White.Core.UIItems.Finders import *
from White.Core.Factory import *
from White.Core.Finder import *
from White.Core.AutomationElementSearch import *
from White.Core.WindowsAPI import *

from System.Diagnostics import Process
wp= Process();
wp.StartInfo.FileName = r"c:\TEMP\gui\TestShell.exe";
wp.StartInfo.Arguments = r"TestShell.taco -e DBA -s qa";        
wp.Start();
wapp = Application.Attach( wp );
wnds=Application.GetWindows(wapp)
wnd=wnds[0]

#test
>wnd.Name
"Test 0.0.1"

我什至可以单击选项卡工具提供的坐标(IronPython)。

def click(cp,mouse,x,y):
    cp = wnd.Bounds.TopLeft;
    cp.Offset(x, y);
    mouse = Desktop.Instance.Mouse;
    mouse.Location = cp;
    mouse.Click(cp);

cp = wnd.Bounds.TopLeft;
mouse = Desktop.Instance.Mouse;
mouse.Location = cp;
mouse.Click(cp);
click(cp,mouse,120,50) #tools

进入窗格:

pn=wnd.GetElement(SearchCriteria.ByAutomationId("_MainForm_Toolbars_Dock_Area_Top"));

系找丝带

rbn=pn.GetElement(SearchCriteria.ByAutomationId("Ribbon"));

或找到所有孩子

pn.FindAll(TreeScope.Children,  Condition.TrueCondition)

似乎没有任何效果。

4

1 回答 1

0

您看到的不一致可能是由于 UIA Verify 使用 UIA 库的本机 COM 版本,而 white 仍然使用旧的托管库。

以我的经验,本机库往往比旧的托管库更快、更稳定、更兼容,因此您应该考虑将代码转换为使用它(或者如果您感觉很慷慨,请在 GitHub 上为 white贡献代码更新它)。

自从我自己完成迁移已经有一段时间了,所以我不记得具体细节了,但基本上你需要生成一个互操作 DLL,它允许你的 .NET 应用程序调用本机 UIA 方法。然后,您可以选择创建自己的包装库,或者可能使用下面提到的其中之一。

我建议参考这些以帮助进行过渡:

UI 自动化 COM 到 .NET 适配器- 为 COM API 创建包装器的早期尝试。我在直接使用它时遇到了麻烦,但最初看一看很有帮助。还可以搜索一些 MSDN 支持论坛帖子,这些帖子是由这个包装器的开发人员制作的关于 COM API 的。不幸的是,由于我的 StackOverflow 代表(长期潜伏者,第一次回答者),我无法链接到他们。

UIA 验证源代码- 您可以看到他们的源代码中有一个 UIAComWrapper 用于访问 COM 接口。您还可以查看该项目,了解他们如何生成互操作 DLL。

于 2012-11-27T23:18:17.640 回答