Tag: ui automation

与其他应用程序交互(例如单击按钮)

我正在尝试在工作中自动执行许多重复性任务,这个小问题让我感到难过。 我们正在使用一个应用程序来打印在线订单的标签,过程是这样的。 点击订单 查看订单详情并点击“完成” 5秒的程序计算 确认您要打印标签 标签打印,你就完成了 在繁忙的日子里,我们必须通过这个过程超过500个订单,因为此任务因为步骤3而消耗了大量无用的时间。用户必须等待这5秒才能单击“打印”按钮。 假设我们有500个订单,即500次5秒,大约40分钟。 整个发送过程花费2个小时,因此有33%的时间因人们等待点击按钮而丢失。 我正在尝试找到一种自动执行步骤4的方法,以便用户在完成步骤2后可以停止与应用程序交互。 那么有没有办法使用C#从另一个应用程序中单击另一个表单中的按钮? 弹出确认屏幕时,必须触发该事件。 请注意,此确认屏幕不是默认的Windows打印对话框,而是应用程序的一部分,因此不会弄乱首选项。

控制模式可用性设置为true但返回“Unsupported pattern。”exception

使用托管UI自动化 ,我正在尝试访问Chrome的标签项的SelectionItem控件模式 。 使用Inspect.exe我注意到这些AutomationElement的IsSelectionItemPatternAvailable设置为true ,这对应于TabItem的文档,声明“标签项控件必须支持SelectionItemPattern” 。 但是,当我尝试检索控件模式时,我得到一个InvalidOperationException ,指出该模式不受支持。 var select = tab.GetCurrentPattern( SelectionItemPattern.Pattern ); 我做错了什么,或者这只是Chrome提供商实施中的一个错误? 我还尝试调用GetSupportedPatterns() ,它返回一个空集合。

C#如何等待弹出窗口并选择它进行输入

我基本上是用C#编写一个专门的宏播放器/录音机。 我需要做的一件事是等待弹出窗口(类似于另存为…对话框),然后我可以选择继续播放宏输入。 理想情况下,我希望能够轮询打开的窗口并搜索其标题以获得匹配的窗口标题。 显然我不能使用Processes.GetProcesses(),因为对话框很可能不会显示为新进程。 我想在哪里打开窗户及其标题?

UI自动化按钮样式已启用

我正在评估用于UI测试的UI自动化,我有一个定义了以下按钮的WPF应用程序: 当我需要在视觉上禁用按钮时我只需更改样式,以便用户知道按钮被禁用(颜色已更改)但仍然按钮在内部启用,因此我仍然可以启动OnClick事件以便在显示消息时用户点击“禁用”按钮。 现在问题是我不知道如何从UI Automation检查它当前应用的样式,即按钮是否被禁用或启用。 你知道我怎么能这样做? 在正常情况下,我应该这样做: Automation.Condition cEBtn = new PropertyCondition(AutomationElement.AutomationIdProperty, “MyBtn”); AutomationElement mybtnElement = appRegraceElement.FindFirst(TreeScope.Children, cEBtn); bool disMyBtn = (bool)mybtnElement .GetCurrentPropertyValue(AutomationElement.IsEnabledProperty); 但在我的情况下,按钮始终启用,因此我需要检查应用于按钮的样式。 非常感谢你。 最好的祝福

如何使用UI自动化库单击“窗格”?

我们有一个应用程序,我需要单击一个窗格。 我尝试使用以下代码,我用它来单击一个按钮,但它给出了不支持的模式exception。 InvokePattern click_pattern = (InvokePattern)adjust_button.GetCurrentPattern(InvokePattern.Pattern); click_pattern.Invoke(); 还有其他办法吗?

在没有InvokePattern或clickablePoint的情况下使用UI Automation调用单击按钮

我尝试向另一个应用程序中的按钮发送单击消息(或调用)。 我使用UISpy.exe,可以找到我需要的元素。 但它没有id,没有clickablePoint,也没有Invoke模式。 我试过以下代码: var processStartInfo = new ProcessStartInfo(@”tdesktop\Program.exe”); var proc = Process.Start(processStartInfo); Thread.Sleep(3000); AutomationElement mainWin = AutomationElement.RootElement.FindChildByProcessId(proc.Id); List elmList= GetChildren(mainWin); //MessageBox.Show(elmList.Count.ToString()); if (elmList.Count == 7) { List menubar= GetChildren(elmList[6]); AutomationElement elementNode = menubar[1]; double x = elementNode.GetClickablePoint().X; double y = elementNode.GetClickablePoint().Y; win32 w = new win32(); w.move_left_click((UInt32)x, (UInt32)y); } 它在elementNode.GetClickablePoint()。X中引发exception,即Autumation元素没有可点击的点。 我也试过TryGetInvokePattern()但仍然抛出execption它没有InvokePattern。 我使用VS2012和.net 4.5 有没有办法做到这一点?

为Silverlight 5应用程序添加Coded UI支持时为什么无法加载System.Core?

我遇到以下问题: 尝试添加对Silverlight 5应用程序([MSDN] [1])的编码UI测试的支持。 第一步是在Silverlight 5项目中引用程序集Microsoft.VisualStudio.TestTools.UITest.Extension.SilverlightUIAutomationHelper.dll。 不幸的是,在添加引用之后,项目停止编译时出现了许多类似的错误: > Error 25 Cannot resolve reference assemblies. Please check the reference assemblies. Could not load file or assembly ‘System.Core, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) ….\ErrorReportDialog.xaml Looks like System.Core 5.0.5.0 fails […]

如何使用UIAutomation带来MDI子窗口的设置焦点

我们有一个旧的遗留应用程序,我们需要自动化。 它使用MDI Windows。 我们正在使用UIAutomation ,我可以成功地为每个MDI子窗口获取相应的AutomationElement。 我不能做的就是把这个元素放在焦点上。 这是我尝试的一些示例代码,但失败了: var desktop = AutomationElement.RootElement; var dolphin = desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, “Dolphin for Windows”, PropertyConditionFlags.IgnoreCase)); dolphin.SetFocus(); var workspace = dolphin.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, “Workspace”, PropertyConditionFlags.None)); var childWindow = workspace.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, “Sharp “)); childWindow.SetFocus(); 此代码中的最后一行失败,出现System.InvalidOperationException 试验,我尝试在childWindow上找到一个控件,并在其上调用SetFocus。 它DID正确地将焦点设置在右侧控件上,但它没有将MDI窗口置于前台。 有任何想法吗?

将自动化ID添加到绑定的combobox项目

我不太熟悉XAML或绑定,但我一直在每个GUI元素上设置AutomationID。 不幸的是我找不到在ComboBox项目上设置AutomationID的方法。 以下是在XAML中声明ComboBox的方法。 在单独的类中,这是创建combobox中的项目的位置。 public enum MoveType { [StringValue(“INBOUND”)] Inbound, [StringValue(“OUTBOUND”)] Outbound } 我无法真正提供更多代码,但我可以尝试回答任何问题。

白色UIAutomation click()停止在不同平台上工作

我正在使用White来自动化我们的C#WPF UI的BDD测试。 我的第一个测试在我的开发机器上运行良好(运行Windows 7)。 但是,当我尝试在构建服务器(运行Windows Server 2003 R2的虚拟机)上运行相同的代码时,它无法正常工作。 在这两种情况下,测试都是从命令行运行的,测试使用的是Cuke4Nuke框架。 在服务器的情况下,我通过远程桌面连接访问服务器。 代码如下: var application = Application.Launch(“whiteApp.exe”); var initializeOption = InitializeOption.NoCache; var windowCriteria = SearchCriteria.ByText(“whiteApp”); var window = application.GetWindow(criteria, initializeOption); var criteria = SearchCriteria.ByAutomationId(“rightButton”); var button = (Button) window.Get(criteria); button.click(); 问题是在服务器上运行按钮单击事件时不会触发它。 如果在白方执行完毕后UI处于打开状态,则可以单击该按钮(使用鼠标)。 一个有趣的观点是,在运行click方法之后,按钮确实显示了被点击的证据,如下图所示,在其他按钮的情况下,显示了鼠标hover效果。