Alex_Follow
Client
- Регистрация
- 12.12.2017
- Сообщения
- 16
- Благодарностей
- 19
- Баллы
- 3
Спасибо, буду проверятьПоследняя стабильная версия уже 4.0
Спасибо, буду проверятьПоследняя стабильная версия уже 4.0
есть несколько способов для поиска текущего активитиПосле команды dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
пишет вот что
Посмотреть вложение 42952
Проставь правильно кавычки после копирования, сам на таком завис вначалеПосле команды dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
пишет вот что
Посмотреть вложение 42952
помогите разобраться
"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?
/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 ...]
Загугли. Через настройки отключается защита.Прошу помочь тех, кто знает. Каждый раз при попытке что-то сделать на эмуляторе Memu, выскакивает вот такое окошко:
Посмотреть вложение 43049
Убрать его можно, нажав "отклонить" вручную, пытался сделать это с помощью зеннопостера - ни в какую. Как это вылечить?
Знаю, что через настройки можно отключить. Вопрос был в том, можно ли это сделать не руками, а с помощью зеннопостера?Загугли. Через настройки отключается защита.
Определяете год (день, месяц) по атрибуту text:
Если год (день, месяц) больше или меньше нужного значения, то делаете несколько свайпов вверх или вниз. И так в цикле, пока не выставите нужную дату.C#:driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'year')]").GetAttribute("text");
driver.FindElementsByClassName("android.widget.EditText").Where(f=> f.Text == "окт.").First().GetAttribute("text");
Вижу 2 возможных варианта решения:А что прописать в этой в этой строке чтобы значение бралось из поле которое второе по соврадению.
Т.к. у поля ввода дня месяца и года один и тот же класс и id
Если искать по обычной конструкции то берет значение из первого совпадения(поля) то есть берет день, как брать из двух других полей
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;
}
}
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");
Вижу 2 возможных варианта решения:
1. Собираешь в коллекцию все одинаковые классы и перебираешь их в цикле, пока не встретится нужный элемент:
2. Если точно известен порядковый номер элемента в коллекции, то можно обратиться к нему напрямую, используя XPath: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; } }
C#:driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");
Юзай NOX, сам перешел с Memu на него, стабильность +1473₽39303Прошу помочь тех, кто знает. Каждый раз при попытке что-то сделать на эмуляторе Memu, выскакивает вот такое окошко:
Посмотреть вложение 43049
Убрать его можно, нажав "отклонить" вручную, пытался сделать это с помощью зеннопостера - ни в какую. Как это вылечить?
2. Если точно известен порядковый номер элемента в коллекции, то можно обратиться к нему напрямую, используя XPath:
C#:driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'date')][2]");
я также перепробывал кучу эмуляторов. запарился решать ошибки с memu. хоть и решил. всеже у меня nox работает стабильно без ошибок в многопотоке.Юзай NOX, сам перешел с Memu на него, стабильность +1473₽39303
Хоть выше и писали что с adb у него напортачено сейчас последняя версия у меня работает, все супер. Даже можно клоны с ПК на ПК переносить и сохраняются данные в приложениях
Порты 62001, 62025-26-27 и тд
Или слушай программой
Кушает ресурсов больше конечно, но это лучше чем бороться с кучей ошибок, особенно если работать нужно в один поток
Попробуй так. К синему полю:Да, попытался использовать эту конструкцию, идеально бы подошла, вот как получается у меня лежит необходимое поле(айди менял конечно же)
То есть ставить просто 1, значение берется из первого поля(выделено черным), а если ставить двойку соответственно уже не находит, как прописать чтобы обращалось сначала к 0(выделено синим) и потом к самому полю уже соответственно(выделено зеленым).
Посмотреть вложение 43078
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]");
driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]/android.widget.EditText");
Во литература это самое главное вообще, понял, спасибо еще раз, попробую вечером))Попробуй так. К синему полю:
и к зеленому полю:C#:driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]");
Здесь нужно играть с XPath и пробовать разные инструменты этого языка. Возможно, нужно обратиться к элементу-предку или элементу-потомку. Сложно сказать, не видя дерева элементов и их значения. Много полезного по XPath можно найти в разных справочниках и примерах: раз, два, три.C#:driver.FindElementByXPath("//android.widget.LinearLayout[contains(@resource-id, 'ЗНАЧЕНИЕ')]/android.widget.NumberPicker[2]/android.widget.EditText");
так возьми и напиши несколько... вот честно вот так напрягают такие челы... просто ужас... особенно когда по долгу сидишь за компом и попадаются такого рода ответы.. нечего сказать так промолчи... гений тво* **тьесть несколько способов для поиска текущего активити
Будь сдержанным. Первое сообщение на форуме и уже критикуешь.так возьми и напиши несколько... вот честно вот так напрягают такие челы... просто ужас... особенно когда по долгу сидишь за компом и попадаются такого рода ответы.. нечего сказать так промолчи... гений тво* **ть
если бы челоеку нужен был бы такой ответ то он послал бы свой вопрос в изрук в руки бесплатным купоном и ждал бы такого же гениального ответа от такого же гения
Можно так:После того как листаем вниз и пытаемся кликнуть выходит такая ошибка
"Выполнение действия CSharp OwnCode:.An unknown server-side error occurred while processing the command. Original error: Failed to Dump Window Hierarchy"
Как я понимаю там наверное не подгрузились элементы. Но в телефоне все подгрузилось. Как сделать чтобы программа начала видеть новые подгруженные элементы
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 . Все что больше все работает.Можно так:
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; } }
Рекомендую использовать android 5 и выше, поскольку с этой версии идет работа с uiautomator2Спасибо за ответ, но ошибка осталась. Проверил ошибка выходит на андроидах версии меньше 5.0.0 . Все что больше все работает.
Может аппиум другую версию попробовать нужно хз.
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();//запускаем процесс и дожидаемся выполнения
Не указан полный путь к файлу adb.exe либо путь не добавлен в переменные окружения.Как отправлять adb команды используя Visual Studio?
Пробовал как писали здесь при помощи следующего кода:
Не помогло... Пишет такую ошибку: System.ComponentModel.Win32Exception: Не удается найти указанный файл.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();//запускаем процесс и дожидаемся выполнения