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

Harvertalex

Client
Регистрация
21.11.2018
Сообщения
34
Благодарностей
2
Баллы
8
Попробуйте добавить директивы Using и Общий код в проект. То что там по умолчанию.
Заработало только после того как мне дали более свежую версию дроида. И работает все прекрасно)
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
 

Вложения

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
жс в браузере можно уже выполнять сейчас в зеннодроиде?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113
Только начинаю осваивать дродид - как работает swipe ? какой аналог этого действия на c# тут? ставлю координаты, ничего не происходит
настройки на скрине
возможно разброс координат слишком маленький для свайпа

жс в браузере можно уже выполнять сейчас в зеннодроиде?
поидее кубик Свой код>JS должен работать
 
  • Спасибо
Реакции: artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
вы имеете ввиду свайп? его нет на JS
попробуйте установить побольше расстояние для свайпа в координатах
спасибо, попробую. Где можно почитать про методы c# которые используются в дроид? есть какой-то Help ?
в частности как прописать touch событие?

Это действие как в дроид прописывается?
C#:
HtmlElement search = droid.AppiumDriver.FindElementById("search_searchEditText");
instance.ActiveTab.Touch.Touch(search);
 
Последнее редактирование:

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
что означает ошибка: Запустить устройство. Не удалось запустить прокси? при это экран телефона появляется и потом сразу исчезает. Что нужно настроить? модель телефона Xiaomi M2006C3LG (Android 11)
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Скорее всего, проблема с Проксифаером.
Он или удален из системы или что то с ним еще произошло.
Попробуйте удалить ЗД и ПФ (отдельно), установить ЗД заново, вместе с ним установится ПФ.
просто отключил его, пошло. Где можно справку почитать по c# для дроида?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
474
Благодарностей
372
Баллы
63

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Последнее редактирование:

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
как можно проверить какой экран сейчас открыт на телефоне? и есть ли на нем нужный элемент?

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

Вложения

Последнее редактирование:

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
474
Благодарностей
372
Баллы
63
Ссылка нерабочая
Вообще должна открываться.
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

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
474
Благодарностей
372
Баллы
63
не совсем понимаю, как проверить наличие иконки 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

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise

еще вопрос тут же: захожу в яндекс браузер, надо найти все сайты, которые в поиске и кликнуть на случайный. Как это сделать?
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
После установки телефона, дроид перестал видеть memu. Как его снова выбрать и установить? пробовал через кубик "выбрать" и писал MEmu но не находит. Версия дроида enterprise
Мему образ запущен в тот момент, когда вы хотите его запустить в ЗД?
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Уточню на всякий случай - запущен Мему - в смысле не просто запущен МультиМему, но и запущена виртуальная машина?
да верно - мультик запущен, также запущена вирт машина. В мультике нажал кнопку "начать"
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Старайтесь по возможности использовать поиск UiAutomator. Он изначально предназначен для автоматизации тестирования. XPath не очень рекомендуется (но можно). Search the app XML source using xpath (not recommended, has performance issues)
UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
 
Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
UiAutomator надежнее ищет чем xpath? В чем преимущество?
xpath же удобнее и привычнее. В нем можно составлять длинные конструкции с учетом взаимной вложенности, что в силу ограниченности данных по элементу очень важно. А для UiAutomator можно учитывать вложенность и соседние элементы?
Используйте то, что у вас работает.
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
474
Благодарностей
372
Баллы
63
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
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
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
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
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

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

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

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