Xamarin.UITest: 如何获取设备显示坐标
Xamarin.UITest: How To Retrieve Coordinates of Device Display
我正在使用 Xamarin.UITest 在 C# 中编写 UITest。
如何在 UITest 中动态检索设备屏幕的坐标?
在Xamarin.UITest中,调用app.Query()
时,第一个查询结果会return设备显示。然后,您可以使用 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;
Brandon 的回答很好,但是 app.Query()
没有谓词 非常慢 ,因为它 returns 是一个数组而不是 IEnumerable<AppResult>
- 在我目前使用的应用程序中需要 ~10 秒.
作为一种更快的替代方法,您可以指定您知道靠近根的元素的自动化 ID(或其他谓词)。例如,假设您的视图使用 ContentPage
,您可以使用:
var content = app.Query("content").First();
var rect = content.Rect;
不到 1 秒即可完成。
请注意,这不会为您提供精确的显示尺寸 - 它是 ContentPage
的尺寸,因此它会略小于显示尺寸(但对于我的用例来说,这很好) .
我正在使用 Xamarin.UITest 在 C# 中编写 UITest。
如何在 UITest 中动态检索设备屏幕的坐标?
在Xamarin.UITest中,调用app.Query()
时,第一个查询结果会return设备显示。然后,您可以使用 Rect
属性.
下面是显示 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;
Brandon 的回答很好,但是 app.Query()
没有谓词 非常慢 ,因为它 returns 是一个数组而不是 IEnumerable<AppResult>
- 在我目前使用的应用程序中需要 ~10 秒.
作为一种更快的替代方法,您可以指定您知道靠近根的元素的自动化 ID(或其他谓词)。例如,假设您的视图使用 ContentPage
,您可以使用:
var content = app.Query("content").First();
var rect = content.Rect;
不到 1 秒即可完成。
请注意,这不会为您提供精确的显示尺寸 - 它是 ContentPage
的尺寸,因此它会略小于显示尺寸(但对于我的用例来说,这很好) .