问题标签 [ui-automation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1199 浏览

automation - 如何编写自动填充用户输入的 ksh 脚本?

有没有办法在 ksh 脚本中自动化用户输入?

我意识到,在许多情况下,您可以创建一个期望脚本来完全按照我的意思执行,但是服务器上没有安装期望,并且在不久的将来不可能发生这种情况。但我仍然需要一种自动化用户输入的方法,因此唯一需要的反应就是启动脚本。

0 投票
1 回答
1305 浏览

c# - WndProc(ref Message m),防止最小化游戏,发送击键

概述:

我将创建一个与游戏和其他应用程序交互的触摸应用程序。这个概念类似于touch-buddy.com上的应用程序,但我将使用 C# 和 WPF,而不是使用 Perl 编写应用程序的方式。

我想评估一些挑战。touch-buddy 应用程序在与游戏交互时使用两种方法;

  1. 客户端模式(同一台机器运行游戏和触摸伙伴)。
  2. 服务器/客户端模式,其中一个单独的盒子向游戏机发送命令。

我相信这种方法的原因是为了规避游戏最小化的问题。

在仅客户端模式下,我遇到的问题是,我触摸了一个屏幕,而不是查看游戏的主屏幕,然后游戏最小化。并非所有游戏都有这种行为,但我想征服那些可以最小化和防止它的游戏。

是否可以保持游戏的前沿和中心集中并防止最小化使用 C# WndProc(ref Message m)?

我一直在尝试使用WndProc(参考消息 m),在其中创建了一个 win 表单,当我在自己的 Win 表单上按最小化时,它将关闭一个记事本实例。这向我证明了我可以捕获一条消息,防止该消息冒泡,然后将一条消息发送到另一个应用程序。然后我尝试用我的触摸屏点击记事本,让我的 win 表单应用程序保持焦点而不是最小化。在这一点上,我不成功。我需要更多时间来理解消息代码。

这是正确的方法吗?可以做到吗?我应该查看其他库,例如 Windows 自动化吗?

关键输入是我关心的另一个问题。将击键发送到其他应用程序/游戏的最佳方式是什么。我应该使用 DirectX,使用某种发送键,自动化框架吗?这些中的任何一个都可以处理某些模拟游戏所需的多个击键吗?

我感谢您可能拥有的任何链接和/或见解。如果您出于任何原因走上了这条路,我很想听听您的意见。

斯坦

0 投票
1 回答
1624 浏览

wpf - 如何从 UI 自动化框架获得 WPF UserControl DependencyProperty 的值?

我无法通过 UI 自动化框架访问我​​的 WPF UserControl DependencyProperty 值。

我以 MSDN 中的 James McCaffreys 文章作为起点(Automating IO Tests in WPF Applications,MSDN March 2009),但我只能在标准控件(如按钮)中查看属性等。

我假设我必须在我的 UserControl 上实现一些自动化接口,但是什么以及如何实现?

我已经可以很好地看到我的控件,例如在 UISpy 中,但是我看不到其中的依赖属性。这是我的用户控件当前在 UISpy 中的样子:

AutomationElement 通用辅助功能 AccessKey:“”AcceleratorKey:“”IsKeyboardFocusable:“False”LabeledBy:“(null)”HelpText:“开关48v幻象电源开/关(仅用于麦克风输入)。”

状态 IsEnabled:“True” HasKeyboardFocus:“False”

标识 ClassName:“”ControlType:“ControlType.Custom”Culture:“(null)”AutomationId:“V48SwL”LocalizedControlType:“custom”名称:“”ProcessId:“5684(VirtualSix)”RuntimeId:“7 5684 40026340”IsPassword: “假” IsControlElement:“真” IsContentElement:“真”

Visibility BoundingRectangle: "(140, 457, 31, 20)" ClickablePoint: "155,467" IsOffscreen: "False"

控制模式

0 投票
2 回答
869 浏览

c# - UI-Automation cmdlet 找不到控件

我正在尝试使用 MSFT 提供的 UI-Automation 框架测试 WPF 应用程序。编写了一些 powershell 脚本,它们调用为操纵应用程序的可视控件而创建的 cmdlet。

我的应用程序中有一个下拉菜单,其中包含一个条目“DropDownEntry”。在我的 cmdlet 中,我正在尝试执行以下操作:

上面给定的代码片段在执行时返回“null”,这基本上意味着上面给定的逻辑无法找到我的下拉条目。

有人可以告诉我为什么会发生这种情况吗?我检查了我的控件的名称和值。一切似乎都井然有序。我不确定为什么会发生这种情况。任何帮助将非常感激。

谢谢

0 投票
1 回答
2529 浏览

c# - 已启用 UI 自动化按钮样式

我正在评估 UI 自动化以进行 UI 测试,因为我有一个定义了以下按钮的 WPF 应用程序:

当我需要在视觉上禁用该按钮时,我只需更改样式,以便用户知道该按钮已禁用(颜色已更改),但该按钮仍然在内部启用,因此我仍然可以启动 OnClick 事件以便在何时显示消息用户单击“禁用”按钮。

现在的问题是我不知道如何从 UI 自动化中检查其当前应用的样式,即按钮是否被禁用或启用。你知道我该怎么做吗?

在正常情况下,我应该这样做:

但在我的情况下,按钮始终处于启用状态,因此我需要检查应用于按钮的样式。

非常感谢你。

最好的祝福

0 投票
1 回答
2945 浏览

c# - 如何使用 UIAutomation 设置 MDI 子窗口的焦点

我们有一个旧的遗留应用程序需要自动化。它使用 MDI 窗口。

我们正在使用UIAutomation,我可以成功地为每个 MDI 子窗口获取适当的 AutomationElement。我不能做的是把那个元素放在焦点上。

这是我尝试过的一些示例代码,但失败了:

此代码中的最后一行因 System.InvalidOperationException 而失败

实验中,我尝试在 childWindow 上找到一个控件,并在其上调用 SetFocus。它确实正确地将焦点设置在正确的控件上,但它没有将 MDI 窗口带到前台。

有任何想法吗?

0 投票
1 回答
602 浏览

c# - Hudson 似乎没有运行 Process.Start 正确

对于一个项目,我必须在 C# 中启动一个应用程序,撕掉与流程相关的 AutomationElement 树,然后关闭应用程序并输出树。我通过使用 Process.Start 打开应用程序来做到这一点。然后,我找到了与生成的进程相关的 AutomationElement,并结合使用 TreeWalker 和 AutomationElement 的 FindFirst 和 FindAll 方法来遍历树。

这在我的计算机上运行良好,并在本地使用 NUnit 正确运行。它也可以在我组计算机中的其他人上运行。问题是它永远不会在我们运行 Hudson 的中央测试服务器上运行。经过几个小时的调试,我在 Hudson 上进行了测试,启动应用程序,然后打印第一级 AutomationTree。在我的电脑上,这会打印我桌面上的所有窗口。在 Hudson 上,这仅打印桌面。

考虑到可能有多个桌面,我尝试在 RootElement 上使用 TreeWalker 的 GetNextSibling 函数。它仍然只报告了一个桌面。

这是我用来启动进程的代码。

sApplicationPath 设置为可执行文件的绝对路径。iInitialDelay 是确保应用程序有时间启动的延迟。我在 Windows Vista SP2 上的“C:\Windows\System32\notepad.exe”上运行它,并使用 v3.5 C# 编译器对其进行编译。

FindChildProcessById 定义如下:

请记住,这可以在我的计算机上编译并运行。我在 Hudson 上的测试程序说 RootElement 根本没有孩子。

所以我启动应用程序,确认它存在,然后我找不到与该进程关联的任何窗口。除了桌面,我找不到任何与任何东西相关联的窗口。

这是哈德森的问题吗?Hudson 是否以某种特定方式工作,而该代码无法在其上工作?我的代码有问题吗?Hudson 服务器在 Windows Server 2003 计算机上运行。任何帮助,将不胜感激。我知道这是一个非常具体的问题,这就是我在网上找不到任何解决方案的原因。

0 投票
4 回答
8196 浏览

wpf - 如何在对项目进行分组的 WPF ItemsControl 上使用 UI 自动化?

我正在使用Microsoft UI 自动化(即AutomationElement)对我的应用程序运行自动化验收测试。这进展顺利,但我遇到了似乎没有暴露于自动化框架的情况。

我有一个ItemsControl(尽管我可以使用它的派生控件之一,例如ListBox),并且我正在使用CollectionViewSource对项目进行分组。这是一个完整的窗口来演示:

这会生成一个窗口,其中包含分组到其类别中的项目,并且每个项目都有一个我想使用 UI 自动化单击的按钮:

带有列表的窗口的屏幕截图
(来源:brizzly.com

但是,如果我查看UISpy.exe(或使用 导航AutomationElement),我只会看到组(即使在原始视图中):

UISpy
(来源:brizzly.com

如您所见,这些组在那里,但它们不包含任何项目,因此无处可寻按钮。我已经在 WPF 3.5 SP1 和 WPF 4.0 中尝试过这个并得到相同的结果。

是否可以在分组的项目上使用 UI 自动化,如果可以,如何?

0 投票
1 回答
966 浏览

cookies - How to explicitly add a cookie in Watir?

I need to set a cookie in IE to execute some specific flow. I tried using the following code

ieb = Watir::IE.new

ieb.document.cookie="rememberme=foobar;Path=/; Domain=sometestdomain.com"

# Bring up browser and do bunch of stuff

However, I see that when the IE comes up, rememberme cookie is not set. Am I doing something wrong here?

0 投票
1 回答
697 浏览

c# - 当只需要几个方法时,有什么方法可以避免创建一个巨大的 C# COM 接口包装器?

大家好,

我正在开发一个 C# 程序,该程序需要能够在 Windows 7 Explorer 的新 ItemsView 控件中获取热门项目的索引。幸运的是,Microsoft 提供了一种通过 UI 自动化执行此操作的方法,即查询控件的自定义属性。

不幸的是,System.Windows.Automation 命名空间莫名其妙地似乎没有提供查询自定义属性的方法!这让我不得不完全放弃 C# 自动化命名空间并仅使用非托管 COM 版本。一种方法是将所有自动化代码放在一个单独的 C++/CLI 模块中,并从我的 C# 应用程序中调用它。但是,如果可能,我想避免使用此选项,因为它会向我的项目添加更多文件,并且我不得不担心 32/64 位问题等。

另一种选择是使用 ComImport 属性来声明相关接口并通过 COM-interop 完成所有操作。这就是我想做的。但是,IUIAutomation 和 IUIAutomationElement 等相关接口非常庞大。它们总共有数百种方法,并且引用了大量的接口(我假设我也必须声明),几乎所有这些我永远不会使用。我认为 UI 自动化接口也没有在任何类型库中声明,所以我不能使用 TLBIMP。

有什么方法可以避免手动将 bajillion 方法签名转换为 C#,而只声明我实际需要的十个左右的方法?我看到 C# 4.0 添加了一种新的“动态”类型,它应该可以简化 COM 互操作;这和我的问题有关系吗?

谢谢