Xamarin.UITest:如何检索设备显示的坐标

Posted

技术标签:

【中文标题】Xamarin.UITest:如何检索设备显示的坐标【英文标题】:Xamarin.UITest: How To Retrieve Coordinates of Device Display 【发布时间】:2016-12-22 00:02:15 【问题描述】:

我正在使用 Xamarin.UITest 在 C# 中编写 UITest。

如何在 UITest 中动态检索设备屏幕的坐标?

【问题讨论】:

【参考方案1】:

在 Xamarin.UITest 中,当你调用app.Query() 时,第一个查询结果将返回设备显示。然后,您可以使用 Rect 属性获取 XY 坐标。

以下是显示app.Query().First() 结果的示例 REPL 输出,以及将 XY 坐标分配给 UITest 中的变量的示例代码。

REPL 的示例输出

示例代码

var windowQuery = app.Query().First();

var topLeftXCoordinate = windowQuery.Rect.X;
var topLeftYCoordinate = windowQuery.Rect.Y;

var topRightXCoordinate = windowQuery.Rect.X + windowQuery.Rect.Width;
var topRightYCoordinate = windowQuery.Rect.Y;

var bottomLeftXCoordinate = windowQuery.Rect.X;
var bottomLeftYCoordinate = windowQuery.Rect.Y + windowQuery.Rect.Height;

var bottomRightXCoordinate = windowQuery.Rect.X + windowQuery.Rect.Width;
var bottomRightYCoordinate = windowQuery.Rect.Y + windowQuery.Rect.Height;

var centerXCoordinate = windowQuery.Rect.CenterX;
var centerYCoordinate = windowQuery.Rect.CenterY;

【讨论】:

【参考方案2】:

Brandon 的回答效果很好,但没有谓词的 app.Query() 很慢,因为它返回一个数组而不是 IEnumerable<AppResult> - 在我目前正在使用的应用程序中需要 em>~10 秒.

作为一种更快的替代方法,您可以指定您知道位于根附近的元素的自动化 ID(或其他一些谓词)。例如,假设您的视图使用ContentPage,您可以使用:

var content = app.Query("content").First();
var rect = content.Rect;

这在不到 1 秒的时间内完成。

请注意,这不会为您提供精确的显示尺寸 - 它是 ContentPage 的尺寸,因此它会比显示尺寸略小(但对于我的用例来说,这很好)。

【讨论】:

以上是关于Xamarin.UITest:如何检索设备显示的坐标的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin UITest - 确定设备是适用于Android的手机还是平板电脑?

如何使用 xamarin.UITest 从 iOS 上的表格单元格中清除文本?

如何停止 Xamarin.UITest 删除测试之间的数据?

Xamarin.UITest :: 如何点击段落中的特定单词?

如何阻止我的 Xamarin.UITest 两次运行测试?

如何与 Xamarin UITest 中的自定义键盘进行交互?