我正在使用Xamarin.UITest在C#中编写UITest。
如何在UITest中动态检索设备屏幕的坐标?
答案 0 :(得分:5)
在Xamarin.UITest中,当您调用app.Query()
时,第一个查询结果将返回设备显示。然后,您可以使用Rect
属性获取XY坐标。
下面是显示app.Query().First()
结果的示例REPL输出,以及将XY坐标分配给UITest中变量的示例代码。
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>