Релиз ZennoDroid Pro — Финальный релиз!

Попробуйте добавить директивы Using и Общий код в проект. То что там по умолчанию.
Заработало только после того как мне дали более свежую версию дроида. И работает все прекрасно)
 
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
 

Вложения

  • droid.jpg
    droid.jpg
    31,7 KB · Просмотры: 212
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
возможно разброс координат слишком маленький для свайпа

жс в браузере можно уже выполнять сейчас в зеннодроиде?
поидее кубик Свой код>JS должен работать
 
  • Спасибо
Реакции: artsmm
вы имеете ввиду свайп? его нет на JS
попробуйте установить побольше расстояние для свайпа в координатах
спасибо, попробую. Где можно почитать про методы c# которые используются в дроид? есть какой-то Help ?
в частности как прописать touch событие?

Это действие как в дроид прописывается?
C#:
Развернуть Свернуть Копировать
HtmlElement search = droid.AppiumDriver.FindElementById("search_searchEditText");
instance.ActiveTab.Touch.Touch(search);
 
Последнее редактирование:
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
 
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
 
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
просто отключил его, пошло. Где можно справку почитать по c# для дроида?
 
Справки по C# для Дроида пока нет.
Хорошо. Как правильно этот метод написать?
C#:
Развернуть Свернуть Копировать
HtmlElement search = droid.AppiumDriver.FindElementById("search_searchEditText");
instance.ActiveTab.Touch.Touch(search);
 
Хорошо. Как правильно этот метод написать?

C#:
Развернуть Свернуть Копировать
var element = driver.FindElementById("com.android.chrome:id/title");
if (element == null)
    throw new Exception("Элемент не найден");

element.Click();

Примеры: https://www.dropbox.com/s/yunt5m3w7zbgbkx/apiFindElements.droid?dl=0
 
как можно проверить какой экран сейчас открыт на телефоне? и есть ли на нем нужный элемент?

не совсем понимаю, как проверить наличие иконки wb ? в данном примере - на телефоне.
пример на скрине. Если отправлять в конструктор действий, то выходит "имя атрибута" - content-desc, как его в коде определить? c#
 

Вложения

  • iconwb.jpg
    iconwb.jpg
    47,8 KB · Просмотры: 178
Последнее редактирование:
Ссылка нерабочая
Вообще должна открываться.
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);
 
  • Спасибо
Реакции: artsmm
не совсем понимаю, как проверить наличие иконки 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 возвращается для наглядности, чтобы можно было проверить, что найден элемент в нужной области. Можно убрать

Старайтесь по возможности использовать поиск UiAutomator. Он изначально предназначен для автоматизации тестирования. XPath не очень рекомендуется (но можно). Search the app XML source using xpath (not recommended, has performance issues)
 
  • Спасибо
Реакции: artsmm
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise

еще вопрос тут же: захожу в яндекс браузер, надо найти все сайты, которые в поиске и кликнуть на случайный. Как это сделать?
 
Последнее редактирование:
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise
Мему образ запущен в тот момент, когда вы хотите его запустить в ЗД?
 
Уточню на всякий случай - запущен Мему - в смысле не просто запущен МультиМему, но и запущена виртуальная машина?
да верно - мультик запущен, также запущена вирт машина. В мультике нажал кнопку "начать"
 
Старайтесь по возможности использовать поиск UiAutomator. Он изначально предназначен для автоматизации тестирования. XPath не очень рекомендуется (но можно). Search the app XML source using xpath (not recommended, has performance issues)

UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
 
Последнее редактирование:
UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
Используйте то, что у вас работает.
 
UiAutomator надежнее ищет чем xpath? В чем преимущество?
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 + ");");

ProjectMakerZD_ymjLQWECeq.gif


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");
Поиск вернет Set screen lock, а не Settings
ProjectMakerZD_SDryABKBqD.png
 
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 + ");");

Посмотреть вложение 109094


Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст 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");
Поиск вернет Set screen lock, а не Settings
Посмотреть вложение 109093
То, что скролировать умеет - это большое преимущество - согласен.
Но у 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 + ");");

Посмотреть вложение 109094


Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст 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");
Поиск вернет Set screen lock, а не Settings
Посмотреть вложение 109093
Поясните плс. вот эту функцию как она работает и почему там 2 new внутри.
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
по Instance - в теории понятно что это номер совпадения, но как его мерять?)) Тут надо в поиск элемента в окне проекта добавлять поиск/исследование элемента в формате UiAutomator

Если можно, тестовый проект тоже дайте на то, что сверху, чтобы можно было самому этот код потестировать.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)