- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在开发 C# Windows 窗体应用程序并使用 UI 自动化来记录用户事件。我们的应用将其 DPI 感知声明为每显示器,因此系统不会通过坐标虚拟化对其撒谎。
在 Windows 10 上,我们遇到了 记事本 的问题:执行屏幕缩放后,调用 UIA 方法 ElementFromPoint()
时返回不正确的元素通过了正确的物理坐标。此外,CurrentBoundingRectangle()
调用返回的 BoundingRectangle 的坐标也不正确:除以当前屏幕比例值,即 1.5 表示 150%。
有没有人遇到过这个问题,你是怎么解决的?
背景
并非记事本窗口的所有 UI 元素都受到影响:只有系统按钮和主菜单项。其他元素,如主文本区域、滚动条、窗口标题、对话框按钮、子菜单项,都得到了正确处理。
考虑以下测试代码:
private CUIAutomation automation = new CUIAutomation();
public async Task GetElement(int x, int y)
{
try
{
Debug.WriteLine($"MouseDown received: X={x} Y={y}");
await Task.Run(() =>
{
// Retrieving an UIA element lying on physical coordinates
tagPOINT point = new tagPOINT { x = x, y = y };
IUIAutomationElement clickedElement = automation.ElementFromPoint(point);
var elementName = clickedElement.GetCurrentPropertyValue(30005);
var elementRect = clickedElement.CurrentBoundingRectangle;
// Actually retrieved UIA element
Debug.WriteLine($"UIA element: Name={elementName} " +
$"Rect=[left={elementRect.left} top={elementRect.top} right={elementRect.right} bot={elementRect.bottom}]");
});
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
在 Win 10 上,此代码为"file"主菜单项返回不正确的元素和 BoundingRectangle:
MouseDown received: X=735 Y=391
UIA element: Name=Application
Rect=[left=475 top=249 right=822 bot=268]
系统按钮的 BoundingRectangle 不正确:
MouseDown received: X=701 Y=282
UIA element: Name=System
Rect=[left=453 top=183 right=475 bot=205]
并为其他 UI 控件(即文件 -> 保存子菜单项)更正元素和 BoundingRectangle:
MouseDown received: X=1386 Y=666
UIA element: Name=Save
Rect=[left=1320 top=652 right=1452 bot=691]
这些结果不会在声明自己为 System-DPI-aware 的旧版记事本上重现。
例如,在 Windows 7 上,始终会检索到正确的元素和边界矩形。
此外,我还在 Win 10 上测试了其他应用程序,这些应用程序实现了每显示器 DPI 感知模式:Acrobat Reader DC、Edge、Skype、Slack、Explorer。这些应用程序的主菜单也得到了正确处理:检索了正确的元素和边界矩形。
因此 Windows 10 记事本的按监视器模式实现可能存在问题。
最佳答案
经过大量测试后,我发现原因在于“首选 32 位”标志:当为可执行项目启用它时,从记事本中检索到不正确的 UIA 元素和边界矩形。
启用“首选 32 位”:
禁用“首选 32 位”:
关于c# - UIAutomation 方法 ElementFromPoint() 从 Windows 10 上的记事本中检索不正确的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50591092/
我有一个正在购买产品的应用程序。在 uiautomation 测试期间,我想测试整个 View ,但不希望它实际购买。 如果设备在 ui-automator 模式下运行,如何检查测试应用程序? 最佳答
import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundEx
我正在尝试使用 UIAutomator 滚动。场景是我进入选项卡中的“设置”菜单并单击“应用程序选项”,这会为我提供选项卡中所有应用程序的列表。现在我想滚动应用程序列表,这是我面临问题的地方。它滚动设
我目前使用的是 Nexus 5 设备。 我正在尝试点击屏幕上的“删除帐户”。我使用了 UIAutomatorViewer 工具并找到了屏幕上所有元素的节点详细信息。有三个元素对应于我正在查看的“添加帐
我想在 Windows 上仅使用命令行工具编译和运行 Android UI 黑盒测试。我编写了一个 UiAutomatorTestCase,构建它,并将其上传到 /data/local/tmp/。我确
在发布到 Android 应用程序商店的应用程序的实现中,有什么会阻止我使用 UIAutomator 吗? 我的目标是通过我的应用自动执行与第三方应用的一些简单用户交互。这需要对第三方应用程序进行自省
我试图找到一个很好的资源来开始使用 UIAutomation。我需要在 WPF 应用程序中模拟鼠标输入。有什么好的例子吗?我找不到,还有 MSDN documentation似乎太广泛了。 最佳答案
我的选择器 View 只有一个组件,并且该组件中有 5 个值。 我可以获得轮子的数量以及组件中的值,如下 var picker = window.pickers(); UIALogger.logMes
我是 iPhone Automation 和 iOS4 引入的 UIAutomation 框架的新手。最近,我使用 UIAutomation 通过仪器在 iPhone 模拟器上自动测试应用程序,但它给
当我在 Instruments 中运行 UIAutomation 脚本时,一切正常,但是当我从命令行运行完全相同的脚本时,出现此错误:无法对无效元素执行操作:来自 target.frontMostAp
当我在命令提示符下运行以下命令时,出现以下错误。 命令:C:\Users\ob>uiautomatorviewer 错误: -Djava.ext.dirs=..\lib\x86_64;..\lib i
我正在编写一个脚本来测试 iPhone 上的应用程序。我想放大图像。 我尝试执行inchOpenFromToForDuration({x:80, y:150}, {x:30, y:150}, 2),但
我有一个iPad应用程序,正在为其编写UIAutomation脚本。有一个UIButton,在点击时显示UIPopoverController。我的脚本如何选择(点击)该弹出框内的项目? 编辑: UI
由于我正在使用 Instruments 的 UIAutomation 工具,我需要以下信息: 1) 是否有任何动态提供数据的程序。例如,如果我需要使用此脚本来测试 Textfield 的不同数据,如何
我使用 UIAutomation 测试和制作脚本,我需要在我的 tableView 中循环选择 cell 并等待它下载到另一个. var target = UIATarget.localTarget(
我正在开发一个将捕获屏幕上的文本的 Windows 7 C++ 程序。 Microsoft 的 UIAutomation 框架似乎是实现它的最佳方式。除了一件事,我已经让它运行得很好——当我使用框架的
我正在通过 uiautomator 执行单元测试。现在我面临无法管理测试方法顺序的问题。请帮助我如何管理测试方法的运行顺序。它不是按方法顺序工作的。提前致谢。 @Test public void fi
我的 UI automator 测试在 (Lollipop) 模拟器上运行绿色,但在 Sony Xperia Z1 (Lollipop 5.1.1) 上出现此错误。有任何想法吗 ?解决方法? 11-2
我是 uiAutomator 的新手。我尝试将参数传递给方法,它运行但忽略传递给它的任何内容。只是想知道我们是否可以将任何参数传递给 uiAutomator 中的测试类或测试方法? 最佳答案 我知道这
我已经使用 UI Automator 自动转到 android 手机中的设置,我使用“getUiDevice().pressMenu();”单击菜单及其带有 3 个子菜单项的打开菜单,我想使用名称或索
我是一名优秀的程序员,十分优秀!