4 место Управление любыми Android приложениями на смартфоне из ZP

После команды dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
пишет вот что
Безымянный.jpg
 
Последнее редактирование:
  • Спасибо
Реакции: Dimon174, brun0 и udder
помогите разобраться
"C:/Program Files (x86)/Appium/node.exe" "C:/Program Files (x86)/Appium/node_modules/appium/bin/Appium.js" --address 127.0.0.1 --chromedriver-port 9516 --bootstrap-port 4725 --selendroid-port 8082 --no-reset --local-timezone
У меня по данным путям ничего нету

win 7 x64

Возможно нужно установить старую версию appium?
 
помогите разобраться
"C:/Program Files (x86)/Appium/node.exe" "C:/Program Files (x86)/Appium/node_modules/appium/bin/Appium.js" --address 127.0.0.1 --chromedriver-port 9516 --bootstrap-port 4725 --selendroid-port 8082 --no-reset --local-timezone
У меня по данным путям ничего нету

win 7 x64

Возможно нужно установить старую версию appium?


Я с этими библиотеками работаю https://zennolab.com/discussion/thr...i-na-smartfone-iz-zp.33511/page-7#post-281052, но пути в батниках поменять надо.
Советую прочитать все коментарии, здесь много полезного
 
  • Спасибо
Реакции: dsertr21
После: dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
Выдаёт:
C#:
Развернуть Свернуть Копировать
/system/bin/sh: mFocusedApp: not found
/system/bin/sh: mCurrentFocus: not found
usage: grep [-abcDEFGHhIiJLlmnOoPqRSsUVvwxZz] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [pattern] [file ...]
Что я делаю не так?
 
Оли
После: dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
Выдаёт:
C#:
Развернуть Свернуть Копировать
/system/bin/sh: mFocusedApp: not found
/system/bin/sh: mCurrentFocus: not found
usage: grep [-abcDEFGHhIiJLlmnOoPqRSsUVvwxZz] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [pattern] [file ...]
Что я делаю не так?
Одиночные кавычки вручную проставь. При копипасте другие копируются.
 
  • Спасибо
Реакции: KolkaPetkinSyn
Прошу помочь тех, кто знает. Каждый раз при попытке что-то сделать на эмуляторе Memu, выскакивает вот такое окошко:

errrr.png


Убрать его можно, нажав "отклонить" вручную, пытался сделать это с помощью зеннопостера - ни в какую. Как это вылечить?
 
Прошу помочь тех, кто знает. Каждый раз при попытке что-то сделать на эмуляторе Memu, выскакивает вот такое окошко:

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

Убрать его можно, нажав "отклонить" вручную, пытался сделать это с помощью зеннопостера - ни в какую. Как это вылечить?
Загугли. Через настройки отключается защита.
 
Определяете год (день, месяц) по атрибуту text:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'year')]").GetAttribute("text");
Если год (день, месяц) больше или меньше нужного значения, то делаете несколько свайпов вверх или вниз. И так в цикле, пока не выставите нужную дату.


А что прописать в этой в этой строке чтобы значение бралось из поле которое второе по соврадению.
Т.к. у поля ввода дня месяца и года один и тот же класс и id

Если искать по обычной конструкции то берет значение из первого совпадения(поля) то есть берет день, как брать из двух других полей


Пытался искать по конструкции предложенным автором статьи:
C#:
Развернуть Свернуть Копировать
driver.FindElementsByClassName("android.widget.EditText").Where(f=> f.Text == "окт.").First().GetAttribute("text");
Ошибка: не удается искользовать лямбда-выражение в качестве аргументадля динамически отправляемой операции без предварительного преобразования его в делегат или дерево выражений

Заранее спасибо)
 
  • Спасибо
Реакции: webstudioNSS
А что прописать в этой в этой строке чтобы значение бралось из поле которое второе по соврадению.
Т.к. у поля ввода дня месяца и года один и тот же класс и id

Если искать по обычной конструкции то берет значение из первого совпадения(поля) то есть берет день, как брать из двух других полей
Вижу 2 возможных варианта решения:
1. Собираешь в коллекцию все одинаковые классы и перебираешь их в цикле, пока не встретится нужный элемент:
C#:
Развернуть Свернуть Копировать
var MyDate = driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'date')]");
for (int a = 0; a < MyDate.Count; a++ )    {
    if (MyDate.ElementAt(a).Text == "НУЖНОЕ ЗНАЧЕНИЕ") {
        break;
    }
}
2. Если точно известен порядковый номер элемента в коллекции, то можно обратиться к нему напрямую, используя XPath:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");
 
Последнее редактирование:
  • Спасибо
Реакции: Hanma, Dronhik и Koqpe
Вижу 2 возможных варианта решения:
1. Собираешь в коллекцию все одинаковые классы и перебираешь их в цикле, пока не встретится нужный элемент:
C#:
Развернуть Свернуть Копировать
var MyDate = driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'date')]");
for (int a = 0; a < MyDate.Count; a++ )    {
    if (MyDate.ElementAt(a).Text == "НУЖНОЕ ЗНАЧЕНИЕ") {
        break;
    }
}
2. Если точно известен порядковый номер элемента в коллекции, то можно обратиться к нему напрямую, используя XPath:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");


Второй варит должен отлично подойти
Спасибо еще раз, проверю чуть позже)

Уже вроде спрашивал, где все смотрят синтаксис и никто не колитца) в документации у appium на c# для большинста действий нет примеров(
 
Последнее редактирование модератором:
Прошу помочь тех, кто знает. Каждый раз при попытке что-то сделать на эмуляторе Memu, выскакивает вот такое окошко:

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

Убрать его можно, нажав "отклонить" вручную, пытался сделать это с помощью зеннопостера - ни в какую. Как это вылечить?

Юзай NOX, сам перешел с Memu на него, стабильность +1473₽39303

Хоть выше и писали что с adb у него напортачено сейчас последняя версия у меня работает, все супер. Даже можно клоны с ПК на ПК переносить и сохраняются данные в приложениях

Порты 62001, 62025-26-27 и тд
Или слушай программой

Кушает ресурсов больше конечно, но это лучше чем бороться с кучей ошибок, особенно если работать нужно в один поток
 
  • Спасибо
Реакции: Gang
2. Если точно известен порядковый номер элемента в коллекции, то можно обратиться к нему напрямую, используя XPath:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");


Да, попытался использовать эту конструкцию, идеально бы подошла, вот как получается у меня лежит необходимое поле(айди менял конечно же)

То есть ставить просто 1, значение берется из первого поля(выделено черным), а если ставить двойку соответственно уже не находит, как прописать чтобы обращалось сначала к 0(выделено синим) и потом к самому полю уже соответственно(выделено зеленым).
Безымянный.jpg
 
Юзай NOX, сам перешел с Memu на него, стабильность +1473₽39303

Хоть выше и писали что с adb у него напортачено сейчас последняя версия у меня работает, все супер. Даже можно клоны с ПК на ПК переносить и сохраняются данные в приложениях

Порты 62001, 62025-26-27 и тд
Или слушай программой

Кушает ресурсов больше конечно, но это лучше чем бороться с кучей ошибок, особенно если работать нужно в один поток
я также перепробывал кучу эмуляторов. запарился решать ошибки с memu. хоть и решил. всеже у меня nox работает стабильно без ошибок в многопотоке.
 
  • Спасибо
Реакции: Gang
Да, попытался использовать эту конструкцию, идеально бы подошла, вот как получается у меня лежит необходимое поле(айди менял конечно же)

То есть ставить просто 1, значение берется из первого поля(выделено черным), а если ставить двойку соответственно уже не находит, как прописать чтобы обращалось сначала к 0(выделено синим) и потом к самому полю уже соответственно(выделено зеленым).
Посмотреть вложение 43078
Попробуй так. К синему полю:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]");
и к зеленому полю:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]/android.widget.EditText");
Здесь нужно играть с XPath и пробовать разные инструменты этого языка. Возможно, нужно обратиться к элементу-предку или элементу-потомку. Сложно сказать, не видя дерева элементов и их значения. Много полезного по XPath можно найти в разных справочниках и примерах: раз, два, три.
 
  • Спасибо
Реакции: Dronhik
Попробуй так. К синему полю:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]");
и к зеленому полю:
C#:
Развернуть Свернуть Копировать
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]/android.widget.EditText");
Здесь нужно играть с XPath и пробовать разные инструменты этого языка. Возможно, нужно обратиться к элементу-предку или элементу-потомку. Сложно сказать, не видя дерева элементов и их значения. Много полезного по XPath можно найти в разных справочниках и примерах: раз, два, три.
Во литература это самое главное вообще, понял, спасибо еще раз, попробую вечером))
 
есть несколько способов для поиска текущего активити
так возьми и напиши несколько... вот честно вот так напрягают такие челы... просто ужас... особенно когда по долгу сидишь за компом и попадаются такого рода ответы.. нечего сказать так промолчи... гений тво* **ть
если бы челоеку нужен был бы такой ответ то он послал бы свой вопрос в изрук в руки бесплатным купоном и ждал бы такого же гениального ответа от такого же гения
 
так возьми и напиши несколько... вот честно вот так напрягают такие челы... просто ужас... особенно когда по долгу сидишь за компом и попадаются такого рода ответы.. нечего сказать так промолчи... гений тво* **ть
если бы челоеку нужен был бы такой ответ то он послал бы свой вопрос в изрук в руки бесплатным купоном и ждал бы такого же гениального ответа от такого же гения
Будь сдержанным. Первое сообщение на форуме и уже критикуешь.
Чтобы не было вопроса перечитал бы 25 страниц топика этого.
Ни кто ни кому ни чего не должен, каждый помогает по мере свободного времени.
Если дал такой ответ, значит дал понять, что есть еще способы и постараетесь найти их самостоятельно. К примеру использовать сторонние apk для показа инфы по приложению.
 
  • Спасибо
Реакции: PussyM
После того как листаем вниз и пытаемся кликнуть выходит такая ошибка
"Выполнение действия CSharp OwnCode:.An unknown server-side error occurred while processing the command. Original error: Failed to Dump Window Hierarchy"

Как я понимаю там наверное не подгрузились элементы. Но в телефоне все подгрузилось. Как сделать чтобы программа начала видеть новые подгруженные элементы
 
Последнее редактирование:
После того как листаем вниз и пытаемся кликнуть выходит такая ошибка
"Выполнение действия CSharp OwnCode:.An unknown server-side error occurred while processing the command. Original error: Failed to Dump Window Hierarchy"

Как я понимаю там наверное не подгрузились элементы. Но в телефоне все подгрузилось. Как сделать чтобы программа начала видеть новые подгруженные элементы
Можно так:
1. Сделал свайп вниз.
2. Проверил наличие нужного элемента.
3. Если отсутствует, то опять свайп.
C#:
Развернуть Свернуть Копировать
for (int k = 0; k < 7; k++) {
    driver.Swipe(0.5, 0.6, 0.5, 0.3, 500);
    System.Threading.Thread.Sleep(1000);
    if (driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'my_text')]").Count>0) {
        project.SendInfoToLog("Элемент найден");
        break;
    }
}
 
  • Спасибо
Реакции: uRusure и gameboy123
В процессе работы бота естественно появляются ошиьки: не отвечают сервера, простоттупит приложение и не грузит, ограничение со стороны сервера и тд

Эти ошибки вылезают в пуш уведомлениях, бувально на секунд 10.

Можно ли как-то отловить эти ошибки? Т.е. получить текст ошибки, для последующих действий в шаблоне

Если да, то как

А то даже не успеваешь ее исследовать спомощью разметчика андройд

Заранее спасибо)
 
Можно так:
1. Сделал свайп вниз.
2. Проверил наличие нужного элемента.
3. Если отсутствует, то опять свайп.
C#:
Развернуть Свернуть Копировать
for (int k = 0; k < 7; k++) {
    driver.Swipe(0.5, 0.6, 0.5, 0.3, 500);
    System.Threading.Thread.Sleep(1000);
    if (driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'my_text')]").Count>0) {
        project.SendInfoToLog("Элемент найден");
        break;
    }
}

Спасибо за ответ, но ошибка осталась. Проверил ошибка выходит на андроидах версии меньше 5.0.0 . Все что больше все работает.
Может аппиум другую версию попробовать нужно хз.
 
Спасибо за ответ, но ошибка осталась. Проверил ошибка выходит на андроидах версии меньше 5.0.0 . Все что больше все работает.
Может аппиум другую версию попробовать нужно хз.
Рекомендую использовать android 5 и выше, поскольку с этой версии идет работа с uiautomator2
 
Как отправлять adb команды используя Visual Studio?
Пробовал как писали здесь при помощи следующего кода:


C#:
Развернуть Свернуть Копировать
using System.Diagnostics;

            ProcessStartInfo startInfo1 = new ProcessStartInfo();
            startInfo1.FileName = @"adb.exe";
            startInfo1.Arguments = @"shell input keyevent 3";//параметры выполнения adb команды
            startInfo1.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
            Process.Start(startInfo1).WaitForExit();//запускаем процесс и дожидаемся выполнения

Не помогло... Пишет такую ошибку: System.ComponentModel.Win32Exception: Не удается найти указанный файл.
 
Как отправлять adb команды используя Visual Studio?
Пробовал как писали здесь при помощи следующего кода:


C#:
Развернуть Свернуть Копировать
using System.Diagnostics;

            ProcessStartInfo startInfo1 = new ProcessStartInfo();
            startInfo1.FileName = @"adb.exe";
            startInfo1.Arguments = @"shell input keyevent 3";//параметры выполнения adb команды
            startInfo1.WindowStyle = ProcessWindowStyle.Hidden;//скрываем окно выполнения
            Process.Start(startInfo1).WaitForExit();//запускаем процесс и дожидаемся выполнения

Не помогло... Пишет такую ошибку: System.ComponentModel.Win32Exception: Не удается найти указанный файл.
Не указан полный путь к файлу adb.exe либо путь не добавлен в переменные окружения.
 
  • Спасибо
Реакции: anarbus
Всю голову сломал уже, как стереть поле вебсайт? по index не ищет, а другие элементы пустые

1571384093635.png
 
Камрады... Кто в теме... Не могли бы вы обновить статью!? Ибо статья (первый пост) 2х летней давности... У меня что то не получается даже стартануть по ней... Может кто помочь!? Готов отблагодарить материально (в разумных пределах).
 

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