Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
как можно проверить какой экран сейчас открыт на телефоне? и есть ли на нем нужный элемент?
не совсем понимаю, как проверить наличие иконки wb ? в данном примере - на телефоне.
пример на скрине. Если отправлять в конструктор действий, то выходит "имя атрибута" - content-desc, как его в коде определить? c#
//Элемент в фокусе
var element = driver.ActiveElement();
//поиск элемента
var element = driver.FindElementByAccessibilityId("Chrome search");
var element = driver.FindElementById("com.android.chrome:id/title");
var element = driver.FindElementByClassName("android.widget.EditText");
var element = driver.FindElementByXPath("//*[@text=\"Display\"]");
var element = driver.FindElementByUiAutomator("new UiSelector().textContains(\"screen\")");
//поиск группы элементов
var elements = driver.FindElementsByAccessibilityId("Chrome search");
var elements = driver.FindElementsById("com.android.chrome:id/title");
var elements = driver.FindElementsByClassName("android.widget.EditText");
var elements = driver.FindElementsByXPath("//*[@text=\"Display\"]");
var elements = driver.FindElementsByUiAutomator("new UiSelector().textContains(\"screen\")");
//поиск элементов со пролистыванием экрана
driver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
driver.ScrollToElementByAccessibilityId("Chrome search", 3);
driver.ScrollToElementByClassName("android.widget.ImageView", 3);
//Текст элемента
var text = element.Text;
//Значение атрибута элемента
var attr = element.GetAttribute(string name);
//Нажатие на элемент
element.Click();
//Очистить элемент
element.Clear();
//Отправить текст с заменой
element.SendText(string text);
//Отправить текст
element.SendKeys(string text);
не совсем понимаю, как проверить наличие иконки wb ? в данном примере - на телефоне.
пример на скрине. Если отправлять в конструктор действий, то выходит "имя атрибута" - content-desc, как его в коде определить? c#
Поиск элементов в кубиках/конструкторе действий (и классический, и по xPath) не использует поиск appium. Поэтому при формировании c# кода есть свои нюансы:
UiAutomator:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByUiAutomator("new UiSelector().description(\"Wildberries\")");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("bounds");
xpath:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByXPath("//*[@content-desc=\"Wildberries\"]");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("bounds");
Bounds возвращается для наглядности, чтобы можно было проверить, что найден элемент в нужной области. Можно убрать
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise
еще вопрос тут же: захожу в яндекс браузер, надо найти все сайты, которые в поиске и кликнуть на случайный. Как это сделать?
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise
UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
UiAutomator лучше рассматривать не как замену привычному поиску, а как способ расширить возможности. Выражения UiSelector выстраиваются в цепочку, все функции возвращают UiSelector.
Из интересных возможностей UiAutomator имеет встроенные методы для работы с scrollable элементами (позволяет выполнять действия похожие на SwipeIntoView из js)
C#:
var driver = instance.DroidInstance.AppiumDriver;
var rotateDate = 3;
var rotateMonth = 2;
var rotateYear = 3;
var res = driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).flingToBeginning(" + rotateDate + ");");
if (res == null)
throw new Exception();
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(1)).flingToBeginning(" + rotateMonth + ");");
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст set, поиск сужен наличием в пути класса RecyclerView:
C#:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByUiAutomator("new UiSelector().className(\"android.support.v7.widget.RecyclerView\").childSelector(new UiSelector().textContains(\"set\"))");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("text");
UiAutomator лучше рассматривать не как замену привычному поиску, а как способ расширить возможности. Выражения UiSelector выстраиваются в цепочку, все функции возвращают UiSelector.
Из интересных возможностей UiAutomator имеет встроенные методы для работы с scrollable элементами (позволяет выполнять действия похожие на SwipeIntoView из js)
C#:
var driver = instance.DroidInstance.AppiumDriver;
var rotateDate = 3;
var rotateMonth = 2;
var rotateYear = 3;
var res = driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).flingToBeginning(" + rotateDate + ");");
if (res == null)
throw new Exception();
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(1)).flingToBeginning(" + rotateMonth + ");");
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст set, поиск сужен наличием в пути класса RecyclerView:
C#:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByUiAutomator("new UiSelector().className(\"android.support.v7.widget.RecyclerView\").childSelector(new UiSelector().textContains(\"set\"))");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("text");
UiAutomator лучше рассматривать не как замену привычному поиску, а как способ расширить возможности. Выражения UiSelector выстраиваются в цепочку, все функции возвращают UiSelector.
Из интересных возможностей UiAutomator имеет встроенные методы для работы с scrollable элементами (позволяет выполнять действия похожие на SwipeIntoView из js)
C#:
var driver = instance.DroidInstance.AppiumDriver;
var rotateDate = 3;
var rotateMonth = 2;
var rotateYear = 3;
var res = driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).flingToBeginning(" + rotateDate + ");");
if (res == null)
throw new Exception();
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(1)).flingToBeginning(" + rotateMonth + ");");
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст set, поиск сужен наличием в пути класса RecyclerView:
C#:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByUiAutomator("new UiSelector().className(\"android.support.v7.widget.RecyclerView\").childSelector(new UiSelector().textContains(\"set\"))");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("text");
Поясните плс. вот эту функцию как она работает и почему там 2 new внутри. driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
по Instance - в теории понятно что это номер совпадения, но как его мерять?)) Тут надо в поиск элемента в окне проекта добавлять поиск/исследование элемента в формате UiAutomator
Если можно, тестовый проект тоже дайте на то, что сверху, чтобы можно было самому этот код потестировать.