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

时间:2016-12-22 00:02:16

标签: c# xamarin ui-testing xamarin.uitest

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

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

2 个答案:

答案 0 :(得分:5)

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

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

REPL的样本输出

Output From 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;

答案 1 :(得分:0)

布兰登的答案效果很好,但是没有谓词的app.Query()很痛苦缓慢,因为它返回的是数组而不是IEnumerable<AppResult>-在我当前正在使用的应用程序中耗时〜10秒

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

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

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

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