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

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
468
Благодарностей
369
Баллы
63
Поясните плс. вот эту функцию как она работает и почему там 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

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 941
Благодарностей
766
Баллы
113
@Anatoly79
Какой в дройде аналог функции чтобы проверить установился ли прокси?
instance.GetProxy().ToString()
 

Anatoly79

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

artsmm

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

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Где находится экшн - "установленные приложения"? в справке никуда не переходит при нажатии на ссылку
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Экшн "Сохранение данных приложения" выдает ошибку: Выполнение действия BackupAppData SU не найден, что это значит?
настройки такие:
имя приложения: com.wildberries.ru
путь к файлу с архивом: {-Project.Directory-}\Profiles\
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 698
Благодарностей
1 077
Баллы
113
Экшн "Сохранение данных приложения" выдает ошибку: Выполнение действия BackupAppData SU не найден, что это значит?
настройки такие:
имя приложения: com.wildberries.ru
путь к файлу с архивом: {-Project.Directory-}\Profiles\
Телефону root сделан?
 

artsmm

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

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 941
Благодарностей
766
Баллы
113
судя по всему нет.. разбираюсь как сделать. как его сделать для android 11 тел redmi 9a ?

пробовал с помощью kingoroot, пишет что рутирование не удалось
Забудь про кингрут уже навсегда ;-)
root делается либо кастомной уже рученой прошивкой, либо magisk и ко. И bootloader надо разлочить ;-)
А на Redmi вроде надо еще "разрешение просить" чтобы тебе дали разлочить и ждать 7 дней. :aq:
Успехов тебе в общем...
 
  • Спасибо
Реакции: bashka

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Забудь про кингрут уже навсегда ;-)
root делается либо кастомной уже рученой прошивкой, либо magisk и ко. И bootloader надо разлочить ;-)
А на Redmi вроде надо еще "разрешение просить" чтобы тебе дали разлочить и ждать 7 дней. :aq:
Успехов тебе в общем...
да уж - не все так просто...
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 785
Благодарностей
1 950
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
как сделать swipe до случайного элемента, исходя из коллекции?
C#:
IReadOnlyCollection<IAndroidElementAPI> allSearchElms = droid2.FindElementsById("com.wildberries.ru:id/image");
Прокрутка вверх так делается?
C#:
instance.DroidInstance.Input.LongTapAndSwipe(-841, -360, -352, -1251, 2);
 
Последнее редактирование:

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
468
Благодарностей
369
Баллы
63
instance.DroidInstance.Input.LongTapAndSwipe(-841, -360, -352, -1251, 2);
Координаты не могут быть отрицательными. Последний параметр - продолжительность в миллисекундах.
instance.DroidInstance.Input.Swipe(500, 1200, 500, 300, 2000);
Включите запись, сделайте свайп по экрану, автоматически сформируется экшен "Эмуляция swipe".
Нажмите правой кнопкой по экшену, в контекстном меню выберите конвертировать в c#. Код будет в буфере обмена. Вставьте его в экшен Свой код C#.
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
468
Благодарностей
369
Баллы
63
IReadOnlyCollection<IAndroidElementAPI> allSearchElms = droid2.FindElementsById("com.wildberries.ru:id/image");
Эта коллекция будет содержать только элементы, которые отображаются на экране, поэтому свайпа к ним не будет. Элементов, которых нет на экране, еще не существует.
Нужна другая логика, Для поиска с прокручиванием можно использовать функции
ScrollToElementByAccessibilityId, ScrollToElementByUiAutomator, ScrollToElementByClassName()
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Эта коллекция будет содержать только элементы, которые отображаются на экране, поэтому свайпа к ним не будет. Элементов, которых нет на экране, еще не существует.
Нужна другая логика, Для поиска с прокручиванием можно использовать функции
ScrollToElementByAccessibilityId, ScrollToElementByUiAutomator, ScrollToElementByClassName()
можете пояснить как эта штука работает?? получается надо сначала просто прокрутить весь экран, чтобы элементы подгрузились? так? потом только крутить до элемента?
 

artsmm

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

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
468
Благодарностей
369
Баллы
63
можете пояснить как эта штука работает?? получается надо сначала просто прокрутить весь экран, чтобы элементы подгрузились? так? потом только крутить до элемента?
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
 

Ysocnet

Client
Регистрация
24.09.2019
Сообщения
106
Благодарностей
58
Баллы
28
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
Здравствуйте. Подскажите, пожалуйста, есть ли рабочий способ использовать IPv6 прокси в ZennoDroid на данный момент?
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Нет, пролистывание автоматическое. Для примера:
instance.DroidInstance.AppiumDriver.ScrollToElementByUiAutomator("new UiSelector().text(\"Display\")", 3);
Функция ищет на экране слово Display, если его нет, пролистывает экран вниз и снова ищет. (число 3 в функции - это максимальное количество пролистываний)
Приветствую. Те сначала метод делает пролистывания, а потом ищет элемент или как? или ищет в каждом пролистывании?
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
468
Благодарностей
369
Баллы
63
Здравствуйте. Подскажите, пожалуйста, есть ли рабочий способ использовать IPv6 прокси в ZennoDroid на данный момент?
К сожалению, пока нет.

Приветствую. Те сначала метод делает пролистывания, а потом ищет элемент или как? или ищет в каждом пролистывании?
Ищет на текущем экране, пролистывает, снова ищет, снова пролистывает,...
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 941
Благодарностей
766
Баллы
113
Ищет на текущем экране, пролистывает, снова ищет, снова пролистывает,...
В общем - такую же функцию можно написать и для Xpath - там ничего гениального.
И притом лучше сразу учесть чтобы не дергало далее, если листать некуда.
Можно же даже в API дойда реализовать - там несложно ;-)
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Как правильно получить текст, который содержится в элементах?
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);
}
Так?
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Как правильно получить текст, который содержится в элементах?
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;
}
 

artsmm

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

artsmm

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

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

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 941
Благодарностей
766
Баллы
113
кто-то знает как правильно сделать?

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

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

radv

Client
Регистрация
11.05.2015
Сообщения
3 785
Благодарностей
1 950
Баллы
113
можно внутри xpath заменить двойные кавычки на одинарные
 
  • Спасибо
Реакции: artsmm

artsmm

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

artsmm

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

artsmm

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

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