2

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

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

4

2 回答 2

6

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

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

REPL 的示例输出

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;
于 2016-12-22T00:02:15.840 回答
0

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

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

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

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

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

于 2019-09-30T14:36:10.880 回答