Привет)
У сенямулятор memu, при прописке команды adb devices она срабатывает, но ответ что подключенных устройств нету, насколько понял после гугл, что нужно перенаправить порты
Просвятите как это сделать?
Заранее благодарен
P.S
Вроде все драйвера и переменные установил
[email protected] напиши мне пожалуйстаДа.
Можно.
Я подключал четыре, уперся в ресурсы своего компьютера.
driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".Атив окно"); // активное окно
cap.SetCapability("unicodeKeyboard", "true");
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]")));
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").Click();
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]")));
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["number"].Value);
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["kod_podtverd"].Value);
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap);
driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'confirm_code_field')]").SendKeys(project.Variables["kod_podtverd"].Value);
Создал сначала свою тему, нужно сразу было тут писать, наверное)
Автоматизирую андройд приложение по данной статье, спасибо автору еще раз)
Есть с# код для автоматизации приложения на андроид, код заканчивается тем, что кликаем для подтверждения отправки проверочного смс. Следовательно далее нам нужно завершить этот экшен С# и выйти для получения смс, но потом ввести этот код в приложении нужно опять на C#. Ставлю новый экшен для этого действия именно(ввод смс), команда вот такая
Код первого экшена C#C#:driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
Если сделать во втором кубике вот так:C#:DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое) cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая) cap.SetCapability("platformName", "Android");//имя платформы cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением cap.SetCapability("appActivity", ".Атив окно"); // активное окно cap.SetCapability("unicodeKeyboard", "true"); AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]"))); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").Click(); wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]"))); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["number"].Value); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["kod_podtverd"].Value);
C#:DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое) AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'confirm_code_field')]").SendKeys(project.Variables["kod_podtverd"].Value);
То будет следующая ошибка: Выполнение действия CSharp OwnCode. An unknown server-side error occurred while processing the command. Original error: The desired capabilities must include either an app, appPackage or browserName
Заранее спасибо за помощь)
Создал сначала свою тему, нужно сразу было тут писать, наверное)
Автоматизирую андройд приложение по данной статье, спасибо автору еще раз)
Есть с# код для автоматизации приложения на андроид, код заканчивается тем, что кликаем для подтверждения отправки проверочного смс. Следовательно далее нам нужно завершить этот экшен С# и выйти для получения смс, но потом ввести этот код в приложении нужно опять на C#. Ставлю новый экшен для этого действия именно(ввод смс), команда вот такая
Код первого экшена C#C#:driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
Если сделать во втором кубике вот так:C#:DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое) cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая) cap.SetCapability("platformName", "Android");//имя платформы cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением cap.SetCapability("appActivity", ".Атив окно"); // активное окно cap.SetCapability("unicodeKeyboard", "true"); AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]"))); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").Click(); wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]"))); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["number"].Value); driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["kod_podtverd"].Value);
C#:DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое) AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'confirm_code_field')]").SendKeys(project.Variables["kod_podtverd"].Value);
То будет следующая ошибка: Выполнение действия CSharp OwnCode. An unknown server-side error occurred while processing the command. Original error: The desired capabilities must include either an app, appPackage or browserName
Заранее спасибо за помощь)
var driver = project.Context["drv"];
driver.FindElementByXPath("//android.widget.EditText[contains(@resource-id, 'confirm_code_field')]").SendKeys(project.Variables["kod_podtverd"].Value);
project.Context["drv"]= driver;
project.Context["drv"]= driver;
var element = driver.FindElement(By.id("element-id"));
Actions actions = new Actions(driver);
actions.MoveToElement(element);
actions.Perform();
Определяете год (день, месяц) по атрибуту text:Можно ли автоматизировать данное действие(выбор даты) в приложении(выбирается в эмуляторе прокручиванием при зажатии левой кнопки мыши)
driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'year')]").GetAttribute("text");
Тап по координатам (кол-во пальцев, координата x, координата y, задержка):Хочу попытаться сделать клик по координатам в приложении, подскажите как реализовать
driver.Tap(1, 100, 100, 2000); // для долгого нажатия (Long press) нужно увеличить задержку
Кст, тоже делаю в memu)) ошибка о сбое в гугл плей задралаОпределяете год (день, месяц) по атрибуту text:
Если год (день, месяц) больше или меньше нужного значения, то делаете несколько свайпов вверх или вниз. И так в цикле, пока не выставите нужную дату.C#:driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'year')]").GetAttribute("text");
Такая ошибка: "google play services has stopped"?Кст, тоже делаю в memu)) ошибка о сбое в гугл плей задрала
Ага, я уже чего только не делал, и переустанавливал, и кэш чистил, и останавливал приложения все, ничего не помогает, только шаблон мне сбивает при работе ...Такая ошибка: "google play services has stopped"?
Возможно поможет это:Ага, я уже чего только не делал, и переустанавливал, и кэш чистил, и останавливал приложения все, ничего не помогает, только шаблон мне сбивает при работе ...
Спасибо, попробую обязательно, тоже отпишу, как и со свайпом)Возможно поможет это:
- В меню Настройки приложения Google Play services нажать кнопку отключить. Андроид предложит удалить обновления и установить старую версию. Подтверждаем.
- Не включая Google Play services, вручную устанавливаем apk, который берем здесь (версию не подскажу, надо пробовать, начиная с максимальной).
У меня ошибка исчезла на MEmu c Андроид 7.1 (устанавливал версию Google Play services 19.2.74)
Перечитал тему, вроде не было еще такого.
Допустим у нас в приложении есть переменная - число в определенной области в приложении, оно обновляется(пусть будет каждую минуту) можно его как-то парсить и класть в переменную в зенке, для дальнейшей обработки
Конечно можно делать просто скриншоты, и отправлять далее на хостинг, например, но это не особо удобно, хочется реализовать более продвинутую схемы что ли
project.Variables["Название переменной"].Value = driver.FindElementByXPath("//xPath путь").GetAttribute("text");
Делаю вот такую конструкцию:Определяете год (день, месяц) по атрибуту text:
Если год (день, месяц) больше или меньше нужного значения, то делаете несколько свайпов вверх или вниз. И так в цикле, пока не выставите нужную дату.C#:driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'year')]").GetAttribute("text");
string ex = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'Айди')]").GetAttribute("text");
project.Variables["test"].Value = ex;
Попробуй задать тип не string, а вот такПодскажите как спарсить номера из приложения.
Был подобный пример
Выводит ошибку: Ошибка в действии "CS1061" ""string" не содержит определение для "GetAttribute". Не удалось найти метод расширения "GetAttribute", принимающий первый аргумент типа "string" (пропущена директива using или ссылка на сборку?)"Код:IZennoList listElements = project.Lists["Список 2"]; // создаём объект lstTest типа IZennoList и привязываем его к списку проекта var elements = driver.FindElementsByXPath("//android.widget.TextView[contains(@resource-id, 'mobi.chat:id/count_members')]"); // ищем все совпадения и сохраняем их в переменную elements foreach(string oneElement in elements) // делаем перебор коллекции { listElements.Add(oneElement.GetAttribute("text")); // добавляем каждый элемент в конец списка }
foreach(IWebElement oneElement in elements)
import io.appium.java_client.android.nativekey.KeyEvent;
driver.pressKey(new KeyEvent(AndroidKey.ENTER));
Actions action = new Actions();
driver.send_keys(Keys.ENTER)
Можно использовать нажатие по коду клавиши. Перечень кодов: https://developer.android.com/reference/android/view/KeyEvent.htmlПодскажите, пожалуйста, как нажать клавишу Enter просто в открытом приложении андройд, не для конкретного элемента, а просто вылезает окно об ошибке в самом эмуляторе. и его можно закрыть нажатием на Enter.
driver.PressKeyCode(66); // 66 - это код ENTER
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"adb.exe";
startInfo.Arguments = @"shell input keyevent 66"; //параметры выполнения adb команды
startInfo.WindowStyle = ProcessWindowStyle.Hidden; //скрываем окно выполнения
Process.Start(startInfo).WaitForExit(); //запускаем процесс и дожидаемся выполнения
if (driver.FindElementsByXPath("//android.widget.TextView[contains(@text, 'Текст ошибки')]").Count>0) {
driver.FindElementByXPath("//android.widget.Button[contains(@text, 'Закрыть')]").Click();
}
Нужно прописать параметр noReset в настройкахВсе работает только, когда запускаю приложение оно пустые. Как будто только что установил.
Как сделать чтобы данные не удалялись в приложении?
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(6000));
То что у тебя в коде это создание обьекта ожидания элементов. его нужно использовать явно. У тебя ошибка в другом. Аппиум не получает команды в течении 60 сек. тебе нужно поискать параметр newCommandTimeoutпосле 60 секунд программа отрубается. Хотя при создании ставлю большой таймаут. Почему не работает?
C#:WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(6000));
В аппиуме это выходит: Shutting down because we waited 60 seconds for a command
В C#
The HTTP request to the remote WebDriver server for URL http://127.0.0.1:4723/wd/hub/session timed out after 60 seconds.
Решил проблему? На телефоне нормально работало, на эмуляторе кушает половину текста. Весь вечер вожусьНачал почему-то кушаться текст, пропадать символы при использования метода SendKeys
Должен быть напечатан: "79215438752"
А печатает только: "7921"
Подскажите, пожалуйста, что это такое, как с этим бороться?
Какой эмулятор используешь? Какая версия андройда?Решил проблему? На телефоне нормально работало, на эмуляторе кушает половину текста. Весь вечер вожусь
эмулятор Memu, настройки ставил разные, Android 5.1.1. Визуально текст набирает намного быстрее чем на телефоне, мощности компа точно хватает.Какой эмулятор используешь? Какая версия андройда?
Компьютер мощный? Может эмуль тормозит?
аппиум какая версия?эмулятор Memu, настройки ставил разные, Android 5.1.1. Визуально текст набирает намного быстрее чем на телефоне, мощности компа точно хватает.
Руками емулятор не тупит. SendKeys пропускает пробелы и если есть в слове две одинаковые буквы подряд то некоторые пропускает.
аппиум какая версия?
какая версия библиотек на c#?
Последняя стабильная версия уже 4.0