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

Поясните плс. вот эту функцию как она работает и почему там 2 new внутри.
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
UiScrollable имеет различные методы (там множество различных вариантов листания и не только). Тут примеры
new UiScrollable(тут поисковое выражение).flingToBeginning()
new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning()
Поиск: new UiSelector().scrollable(true).instance(2);

по Instance - в теории понятно что это номер совпадения, но как его мерять?
Третий элемент на странице у которого атрибут scrollable=true. Ну, примерно так, если бы искали через xpath, //*[@scrollable="true"][3]

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

Если текст большой и разделен слешами? то как правильно искать его? пример: Войти\ под\ другим\ номером
var element = driver.FindElementByUiAutomator("new UiSelector().textContains(\"Войти \\под \\другим\")");
 
  • Спасибо
Реакции: artsmm и Iv1
@Anatoly79
Какой в дройде аналог функции чтобы проверить установился ли прокси?
instance.GetProxy().ToString()
 
instance.GetProxy().ToString()
Нет, такой функции нет.

Я обычно использую curl при тестировании (экшен команда Shell)
curl -s https://api.ipify.org

Опять же, можно сделать один запрос, вроде такого: curl -s http://ip-api.com/line/?fields=lat,lon,timezone,query,
получить широту, долготу, таймзону и IP.
И IP проверить и настройки сразу потом применить.

Если на реальном телефоне отсутствует curl, то его нужно установить.
 
Последнее редактирование:
  • Спасибо
Реакции: myndeswx и Iv1
как я могу сохранить куки профиля для определенного приложения? когда я загружаю профиль, чтобы в приложение уже был выполнен вход вместе с нужным профилем?
 
Где находится экшн - "установленные приложения"? в справке никуда не переходит при нажатии на ссылку
 
Экшн "Сохранение данных приложения" выдает ошибку: Выполнение действия BackupAppData SU не найден, что это значит?
настройки такие:
имя приложения: com.wildberries.ru
путь к файлу с архивом: {-Project.Directory-}\Profiles\
 
Экшн "Сохранение данных приложения" выдает ошибку: Выполнение действия BackupAppData SU не найден, что это значит?
настройки такие:
имя приложения: com.wildberries.ru
путь к файлу с архивом: {-Project.Directory-}\Profiles\
Телефону root сделан?
 
Последнее редактирование:
судя по всему нет.. разбираюсь как сделать. как его сделать для android 11 тел redmi 9a ?

пробовал с помощью kingoroot, пишет что рутирование не удалось
Забудь про кингрут уже навсегда ;-)
root делается либо кастомной уже рученой прошивкой, либо magisk и ко. И bootloader надо разлочить ;-)
А на Redmi вроде надо еще "разрешение просить" чтобы тебе дали разлочить и ждать 7 дней. :aq:
Успехов тебе в общем...
 
  • Спасибо
Реакции: bashka
Забудь про кингрут уже навсегда ;-)
root делается либо кастомной уже рученой прошивкой, либо magisk и ко. И bootloader надо разлочить ;-)
А на Redmi вроде надо еще "разрешение просить" чтобы тебе дали разлочить и ждать 7 дней. :aq:
Успехов тебе в общем...
да уж - не все так просто...
 
как сделать swipe до случайного элемента, исходя из коллекции?
C#:
Развернуть Свернуть Копировать
IReadOnlyCollection<IAndroidElementAPI> allSearchElms = droid2.FindElementsById("com.wildberries.ru:id/image");

Прокрутка вверх так делается?
C#:
Развернуть Свернуть Копировать
instance.DroidInstance.Input.LongTapAndSwipe(-841, -360, -352, -1251, 2);
 
Последнее редактирование:
instance.DroidInstance.Input.LongTapAndSwipe(-841, -360, -352, -1251, 2);
Координаты не могут быть отрицательными. Последний параметр - продолжительность в миллисекундах.
instance.DroidInstance.Input.Swipe(500, 1200, 500, 300, 2000);
Включите запись, сделайте свайп по экрану, автоматически сформируется экшен "Эмуляция swipe".
Нажмите правой кнопкой по экшену, в контекстном меню выберите конвертировать в c#. Код будет в буфере обмена. Вставьте его в экшен Свой код C#.
 
IReadOnlyCollection<IAndroidElementAPI> allSearchElms = droid2.FindElementsById("com.wildberries.ru:id/image");
Эта коллекция будет содержать только элементы, которые отображаются на экране, поэтому свайпа к ним не будет. Элементов, которых нет на экране, еще не существует.
Нужна другая логика, Для поиска с прокручиванием можно использовать функции
ScrollToElementByAccessibilityId, ScrollToElementByUiAutomator, ScrollToElementByClassName()
 
Эта коллекция будет содержать только элементы, которые отображаются на экране, поэтому свайпа к ним не будет. Элементов, которых нет на экране, еще не существует.
Нужна другая логика, Для поиска с прокручиванием можно использовать функции
ScrollToElementByAccessibilityId, ScrollToElementByUiAutomator, ScrollToElementByClassName()
можете пояснить как эта штука работает?? получается надо сначала просто прокрутить весь экран, чтобы элементы подгрузились? так? потом только крутить до элемента?
 
в версии enterprise memu включается? если да, то как это сделать или в какой версии точно можно и с memu, и с телефонами работать?
 
можете пояснить как эта штука работает?? получается надо сначала просто прокрутить весь экран, чтобы элементы подгрузились? так? потом только крутить до элемента?
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
 
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
Здравствуйте. Подскажите, пожалуйста, есть ли рабочий способ использовать IPv6 прокси в ZennoDroid на данный момент?
 
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
Приветствую. Те сначала метод делает пролистывания, а потом ищет элемент или как? или ищет в каждом пролистывании?
 
Здравствуйте. Подскажите, пожалуйста, есть ли рабочий способ использовать IPv6 прокси в ZennoDroid на данный момент?
К сожалению, пока нет.

Приветствую. Те сначала метод делает пролистывания, а потом ищет элемент или как? или ищет в каждом пролистывании?
Ищет на текущем экране, пролистывает, снова ищет, снова пролистывает,...
 
Ищет на текущем экране, пролистывает, снова ищет, снова пролистывает,...
В общем - такую же функцию можно написать и для Xpath - там ничего гениального.
И притом лучше сразу учесть чтобы не дергало далее, если листать некуда.
Можно же даже в API дойда реализовать - там несложно ;-)
 
Как правильно получить текст, который содержится в элементах?
C#:
Развернуть Свернуть Копировать
IReadOnlyCollection<IAndroidElementApi> textElements = droid2.FindElementsByClassName("android.widget.TextView");
List<string> textList = new List<string>();
foreach(var elm in textElements)
{
    string txt = elm.GetAttribute("text");
    textList.Add(text);
}
Так?
 
Как правильно получить текст, который содержится в элементах?
C#:
Развернуть Свернуть Копировать
IReadOnlyCollection<IAndroidElementApi> textElements = droid2.FindElementsByClassName("android.widget.TextView");
List<string> textList = new List<string>();
foreach(var elm in textElements)
{
    string txt = elm.GetAttribute("text");
    textList.Add(text);
}
Так?
У меня так получилось:
C#:
Развернуть Свернуть Копировать
var elms = droid2.FindElementsByClassName("android.widget.ImageView");
project.SendInfoToLog("elms - " + elms.Length);
foreach(var elm in elms)
{
    while(elm != null)
    {
        var imgElm = droid2.FindElementById("com.wildberries.ru:id/image");
        if(imgElm != null)
        {
            imgElm.Click();
            Thread.Sleep(rnd.Next(4000,7000));
            break;
        }
    }
    break;
}
 
как в этом выражении применить правильно String.Format ? Чтобы подставить свое значение
кто-то знает как правильно сделать?

Поясню подробнее:
String.Format работает, если число целое, допусти 156846848 - так находит, а если цена написана так: 9 650 Р, то не находит. Может какой-то символ надо поставить? чтобы работало
 
Последнее редактирование:
кто-то знает как правильно сделать?

Поясню подробнее:
String.Format работает, если число целое, допусти 156846848 - так находит, а если цена написана так: 9 650 Р, то не находит. Может какой-то символ надо поставить? чтобы работало
var elements = driver.FindElementsByXPath("//*[@text=\"Display\"]");

Скорее всего XPath не любит твои кавычки и экранирования.
В проекте "поиск по xpath" потести как оно само предлагает искать (оно там по значению часто ищет) и делай по аналогии.
Как вариант, то что после = делаешь строковой переменной, где в переменной заранее присваиваешь значение нужное, чтобы всякие слеши и кавычки не лезли в XPath выражение.
А еще лучше - вообще не пользовать слеши и кавычки в Xpath придумывая другие селекторы.
 
  • Спасибо
Реакции: artsmm
можно внутри xpath заменить двойные кавычки на одинарные
 
  • Спасибо
Реакции: artsmm
как вы гадаете капчу из под зенндроид? какие настройки надо сделать?
 

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