问题标签 [uia]
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.
ui-automation - 我们可以使用 Microsoft UIAutomation 库“单击”编辑框吗
在我的应用程序中,我们有一个 webbrowserpageviewer 控件。打开网页时,用户需要点击网页上的一些编辑框。我们正在尝试使用 UI 自动化库来模拟这种行为。对此有点新,但我看到我们可以使用 InvokePattern 模拟按钮点击,那么有没有类似的方法来模拟编辑框点击?
session-0-isolation - 会话 0 上的 UI 自动化
我正在尝试使用 UIA 来自动化应用程序。在测试阶段,我使用 psexec 在远程服务器上运行应用程序并在会话 0 中启动它,因为这是唯一保证可用的会话。
这样做时,在切换到会话 0 桌面(来自交互式服务检测消息)之前,我无法自动化应用程序的某些子项。
我添加了一些使用 TreeWalker 遍历应用程序的整个树的代码,我看到在不可见会话 0 中仅创建一些子项,而在交互式桌面(会话 0 或其他)中创建所有子项。
找不到有关此问题的任何文档。
有什么建议么?
ui-automation - UIA 验证无法识别 System.Windows.Forms.ListView 复选框
我对 UI 自动化和 UI 验证工具很陌生。
在我们的应用程序中,我们使用 System.Windows.Forms.ListView 并将 CheckBoxes 属性设置为 true。
CheckBoxes 属性允许您在列表中的每个项目旁边显示一个复选框。这使您的应用程序能够显示项目列表(如果 View 属性设置为 View.Details,则显示子项目)
到目前为止,单个行和每行中的所有值都已被识别。UI 验证仅识别复选框。
命名空间 WindowsFormsApplication1 { public 部分类 Form1 : Form { public Form1() { InitializeComponent()
}
输出:“1”和“pass”这两个值都被 UIA 验证识别。但是无法识别该复选框。
有没有其他人经历过类似的行为?如果是这样,有什么解决办法吗?
非常感谢所有的帮助。
问候 Hari Hara
ruby - 如何为 dragFromToForDuration 方法使用的坐标引用变量
我有一个简单的例程,可以通过在屏幕上向左滑动来删除许多记录。它只删除某种状态的记录,即准备提交。最高记录可能不一定处于那种状态,所以我不能使用固定的 y 坐标。相反,我使用在该状态下找到的第一条记录的 y 坐标。
这是我要执行的代码:
问题是变量 y 似乎在所有这些引号中都无法访问。该方法成功,但 UI 未按预期响应。我在控制台中尝试了该方法。当我将变量替换为整数时,它按预期工作,但变量没有。我试着让它成为一个没有区别的全局变量。我尝试使用点击命令来点击按钮,但再次无声地失败。
有没有办法以这种方式引用此方法中的变量?
c# - 单元测试 WPF 控件获取对子对话框的访问权限
我们正在使用 NUnit 来测试 WPF 控件。文本夹具基本上会打开一个测试窗口,其中包含要在新线程上测试的控件。然后使用 Microsoft UI 自动化 (UIA) 与控件进行交互。
新线程显示窗口并启动调度程序。事情按预期工作。
我们遇到的问题是这个控件可以启动一个对话框。对话框启动后,我们需要与之交互并关闭它。我无法获得对此对话框的引用来完成此任务。
一种不起作用的解决方案是使用 Application.Current.Windows 来获取所有窗口,然后遍历它们直到找到对话框。这不起作用,因为在单元测试期间 Application.Current = null。现在,如果我们只关心这个测试,我们就可以实例化一个应用程序。然而,这会干扰其他测试,因为当我们的应用程序变量超出范围时(在测试结束时),应用程序将自动进入关闭模式。结果,其他测试将失败(最明显的是因为 InitializeComponent 通常调用 System.Windows.Application.LoadComponent 在关机模式下无法调用)。
我想我们需要的是 Application.Current.Windows 的替代品。
com - Microsoft UIAutomation 中是否有任何内部超时?
我正在使用UI 自动化 COM-to-.NET 适配器来读取目标 Google Chrome 浏览器的内容,该浏览器在 Windows 7 上播放 FLASH 内容。它可以工作。
我成功获得了内容和元素。一段时间内一切正常,但几个小时后,这些元素变得无法访问。
(AutomationElement).FindAll()
返回0个孩子。
UIAutomation 是否有任何内部未记录的超时?
根据这个IUIAutomation2 接口 有 2 个超时,但它们不能从 IUIAutomation 接口访问。IUIAutomation2 仅在 Windows 8 上受支持(仅限桌面应用程序)。
所以我相信有一些超时。我做了一个解决方法,从桌面树的开头重新开始搜索和监视元素,但元素仍然不可用。一段时间后(不确定多少)这些元素再次可用。我的要求是尽可能快地读取这些值,但这种行为会对整个架构造成损害。我在某处读到有 3 分钟的超时,但不确定。
如果超时,是否可以更改它?是否可以重新启动某些东西或释放/处置某些东西?我在 MSDN 上找不到任何东西。
有谁知道发生了什么以及如何解决?
c# - Windows UI 自动化:添加事件处理程序时的线程阻塞
我正在编写一个 C# 程序,它通过 Com 互操作使用 UI 自动化。但是,我在从另一个事件处理程序中添加/删除事件处理程序时遇到问题:
我的程序启动了一个新的 MTA 线程,并在该线程上调用 AddFocusChangedEventHandler()。
我想监视焦点元素的属性更改。因此,在焦点更改处理程序中,我对先前获得焦点的元素调用 RemovePropertyChangedEventHandler(),对新获得焦点的元素调用 AddPropertyChangedEventHandler()。
但是,我发现在大约两次焦点更改之后,我不再获得焦点更改或属性更改事件。我的预感是有东西阻塞了后台线程。
如果我删除属性更改的代码,那么焦点跟踪将按预期工作。
我不确定这是否相关 - 但文档指出事件处理程序应该在同一个线程上添加/删除。由于我在一个焦点更改事件中调用 AddPropertyChangedEventHandler(),并在另一个焦点更改事件中调用 RemovePropertyChangedEventHandler(),因此这两个调用可能在不同的线程上执行。但是,我怀疑情况是否如此 - 即使是这样,它也不应该表现出我看到的阻塞行为。为了完整起见,这里只提一下。
c# - UIA InvokePattern.Invoke() 在系统锁定时抛出异常。(在 .NET 4.5.2 中)
一旦系统被锁定,调用 Invoke() 方法(来自 System.Windows.Automation.InvokePattern)就会失败。在将我们的项目迁移到 .NET 4.5.2 后可以看到这种行为。而在 .NET 4.0 中,即使系统被锁定,该调用也可以正常工作。
使用的 dll 是 UIAutomationClient.dll,v4.0.0.0。
我得到的例外是:
System.InvalidOperationException 未被用户代码处理 Message=Operation 由于对象的当前状态而无效。
我知道使用 UIA 进行 GUI 测试通常需要解锁系统。由于此调用在系统锁定在 .NET 4.0 时有效,因此我希望在迁移后具有相同的行为。
ios - 在 calabash-ios consolre 中发送 uia 命令“target.deactivateAppForDuration()”返回错误消息
我正在创建一些 iOS自动化测试。当我调用 send_uia_command
在 calabash-ios 控制台中,应用程序进入后台,在持续时间后台应用程序屏幕打开后,我收到以下错误:
可能是什么问题?
更新:此错误仅在 iOS 9 上返回。
iOS 8.4.1 工作正常。
javascript - UIA 调用纯 JavaScript,不知道如何访问 DOM-Tree
我目前正在尝试自动化一个 iOs 应用程序,其中包含一个 SFSafariViewController,我想在其中单击一个文本字段,该字段具有 HTML 中的 ID,并且还具有来自应用程序的 AccessibilityIdentifier。我现在的问题是如何编写正确的 uia-command,因为正常的 tap_mark 或 touch 没有帮助,因为 SFSafariViewController 找不到 AccessibilityIdentifier。我的 uia 命令现在看起来像这样:
uia("UIATarget.localTarget().frontMostApp().document.getElementById('Identifier').click()")
这是我执行命令时遇到的错误: