Я пишу UITest на С#, используя Xamarin.UITest.
Как я могу получить координаты экрана устройства динамически в UITest?
Я пишу UITest на С#, используя Xamarin.UITest.
Как я могу получить координаты экрана устройства динамически в UITest?
В Xamarin.UITest при вызове app.Query()
первый результат запроса вернет отображение устройства. Затем вы можете получить координаты XY, используя свойство Rect
.
Ниже приведен пример вывода REPL, показывающий результат app.Query().First()
, и пример кода, присваивающий координаты 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;
Ответ Брэндона работает хорошо, но app.Query()
без предиката мучительно медленный, поскольку возвращает массив, а не IEnumerable<AppResult>
— в приложении, с которым я сейчас работаю, это занимает ~10 секунд эм>.
В качестве более быстрой альтернативы вы можете указать идентификатор автоматизации (или какой-либо другой предикат) элемента, который, как вы знаете, находится рядом с корнем. Например, если ваши представления используют ContentPage
, вы можете использовать:
var content = app.Query("content").First();
var rect = content.Rect;
Это завершается менее чем за 1 с.
Обратите внимание, что это не даст вам точный размер дисплея — это размер ContentPage
, поэтому он будет немного меньше, чем размер дисплея (но для моего случая использования это нормально).