Интересно, какой ответ хотите услышать? И заметьте, я предложил разные варианты, а не реклама у меня и так в подписи стоит, люди уже тестируют без оплаты, некоторые уже даже оплатили лицензию.
Пишет что нет переменной driver, я так понял что нужно прикрутить appium но что то пока не получилось... А где можно посмотреть весь список команд или методов (не силен в кодинге) незнаю как они называются, все вот эти функции: напр Click (), Wait () и ДР..?
Пишет что нет переменной driver, я так понял что нужно прикрутить appium но что то пока не получилось... А где можно посмотреть весь список команд или методов (не силен в кодинге) незнаю как они называются, все вот эти функции: напр Click (), Wait () и ДР..?
Пишет что нет переменной driver, я так понял что нужно прикрутить appium но что то пока не получилось... А где можно посмотреть весь список команд или методов (не силен в кодинге) незнаю как они называются, все вот эти функции: напр Click (), Wait () и ДР..?
Тут я заметил, что вроде как порт чтоли занят бывает к которому подключен Automator
В общем я делаю как 1) запускаю AutomatorViewerи затем выполняю шаб... если шаб стопорится на деиствии конект (не может найти порт), то перезапускаю эмулятор...
Подскажите, как запустить конкретный эмулятор (Nox), сабж
C#:
var proc = System.Diagnostics.Process.Start(project.Variables["settings_nox"].Value, Regex.Match(project.Variables["start_cmd"].Value,"-clone:.*").ToString());
просто разворачивает окно первого запущенного эмуля, а должно ведь свободный по идее запускать если первый работает?
Подскажите, как запустить конкретный эмулятор (Nox), сабж
C#:
var proc = System.Diagnostics.Process.Start(project.Variables["settings_nox"].Value, Regex.Match(project.Variables["start_cmd"].Value,"-clone:.*").ToString());
просто разворачивает окно первого запущенного эмуля, а должно ведь свободный по идее запускать если первый работает?
Этот код запускает .exe файл с параметрами указанными после запятой. В данном случае в переменной start_cmd обычно хранится хвост запущенного эмулятора Nox.
А не подскажете где можно узнать все функции объекта ну вот например Wait(), Click() встроенные я так понимаю может есть какие то функции парсинга с экрана в общем как узнать весь список что умеет...
Пробовал смотреть
adb helpтаких функции там нет, за то они есть в СSharp но СSharp овая функция FindElementByAttribute() пишет
"Компиляция кода Ошибка в действии "CS0103" "The name 'FindElementByAttribute' does not exist in the current context". [Строка: 8; Cтолбец: 37]"
C#:
a.Wait("//node[@text='Start Messaging' and @class='android.widget.TextView']",0,10);//XPath, Index, Секунды
C#:
a.Click("//node[@text='Start Messaging' and @class='android.widget.TextView']",0,10);//XPath, Index, Секунды
Варианты что попробовал ошибка примерно всегда одна и таже=))
А не подскажете где можно узнать все функции объекта ну вот например Wait(), Click() встроенные я так понимаю может есть какие то функции парсинга с экрана в общем как узнать весь список что умеет...
Пробовал смотреть
adb helpтаких функции там нет, за то они есть в СSharp но СSharp овая функция FindElementByAttribute() пишет
"Компиляция кода Ошибка в действии "CS0103" "The name 'FindElementByAttribute' does not exist in the current context". [Строка: 8; Cтолбец: 37]"
C#:
a.Wait("//node[@text='Start Messaging' and @class='android.widget.TextView']",0,10);//XPath, Index, Секунды
C#:
a.Click("//node[@text='Start Messaging' and @class='android.widget.TextView']",0,10);//XPath, Index, Секунды
Варианты что попробовал ошибка примерно всегда одна и таже=))
Листал очень долго всю тему разбирался, может уже кто-то писал, но продублирую, чтобы такие же новички как я не мучились. Решение проблемы, когда нужно найти элемент по XPath через текст на кириллице следующее:
В общем коде создал небольшой класс
public class Encoding_Text
{
public static string Encoding_Text_String (string text)
{
Encoding utf8 = Encoding.GetEncoding("ISO-8859-1");
Encoding win1251 = Encoding.GetEncoding("UTF-8");
byte[] utf8Bytes = win1251.GetBytes(text);
byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes);
text = win1251.GetString(win1251Bytes);
return text;
}
}
в кубике C# в зеннопостер добавляю такой код:
string my_text = Encoding_Text.Encoding_Text_String("Здесь пишем текст по которому нужно совершить поиск");
a.Click("//node[contains(@text, '" + my_text + "') and @class='android.widget.TextView']", 0, 1); //XPath, Index, Секунды
Таким образом можно искать элементы по XPath по тексту на кириллице. Может дублирую, но мне так не хватало такого поста, полдня проковырялся, думаю однозначно кому-то поможет)))
Листал очень долго всю тему разбирался, может уже кто-то писал, но продублирую, чтобы такие же новички как я не мучились. Решение проблемы, когда нужно найти элемент по XPath через текст на кириллице следующее:
В общем коде создал небольшой класс
public class Encoding_Text
{
public static string Encoding_Text_String (string text)
{
Encoding utf8 = Encoding.GetEncoding("ISO-8859-1");
Encoding win1251 = Encoding.GetEncoding("UTF-8");
byte[] utf8Bytes = win1251.GetBytes(text);
byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes);
text = win1251.GetString(win1251Bytes);
return text;
}
}
в кубике C# в зеннопостер добавляю такой код:
string my_text = Encoding_Text.Encoding_Text_String("Здесь пишем текст по которому нужно совершить поиск");
a.Click("//node[contains(@text, '" + my_text + "') and @class='android.widget.TextView']", 0, 1); //XPath, Index, Секунды
Таким образом можно искать элементы по XPath по тексту на кириллице. Может дублирую, но мне так не хватало такого поста, полдня проковырялся, думаю однозначно кому-то поможет)))
если кто то работает с эмуляторами по их индексу и задается вопросом, как выстроить логику,
для многопотока, когда вы руками закрыли какую то копию эмулятора,
назрело у меня решение без использования глобалок:
у каждого эмулятора есть возможность получить полный список всех созданных эмуляторов
я использую ldplayer, для него команда будет "list", для других эмуляторов - другая команда
сам код:
C#:
System.Diagnostics.ProcessStartInfo startInfo1 =newSystem.Diagnostics.ProcessStartInfo();
startInfo1.FileName =@"Путь до консоли эмулятора";
startInfo1.Arguments =@"list";// команда для показа списка всех индексов
startInfo1.CreateNoWindow =true;
startInfo1.UseShellExecute =false;
startInfo1.RedirectStandardInput =true;
startInfo1.RedirectStandardOutput =true;System.Diagnostics.Process process = System.Diagnostics.Process.Start(startInfo1);
process = System.Diagnostics.Process.Start(startInfo1);
process.WaitForExit();string emulator_list = process.StandardOutput.ReadToEnd();// получим в переменную все созданные эмуляторыint[] array = emulator_list.Split(new[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Select(x =>int.Parse(x)).ToArray();// занесем в массив индексы всех наших эмуляторовint res =((array.Length +1)* array.Length /2- array.Sum());// найдем пропущенное число, если такого нет - вернет последний индекс + 1
project.Variables["device_index"].Value = res.ToString();// положим в переменную индекс эмулятора, который нужно создать
собственно теперь мы имеем актуальный индекс девайса, который нам нужно клонировать и запустить
неважно, закрывали мы руками до этого какой то эмулятор (с удалением) или просто хотим клонировать новый
UPD:
потестив свой же код пришел к выводу, что он не совсем корректен, потому что, если во время работы мы удалим сразу несколько
эмуляторов, то формула поиска недостающего индекса сработает неверно
к примеру, у меня в работе 5 эмуляторов:
и в какой то момент решил удалить сразу парочку, ну либо они зависли и автоматически удалились:
var sv = project.Variables["device"].Value;var text = project.Variables["Nazvanie"].Value;//sv это серийник устройства для многопотока вида 127.0.0.1:21521ProcessStartInfo startInfo1 =newProcessStartInfo();
startInfo1.FileName ="adb.exe";
startInfo1.Arguments ="-s "+sv+" shell am broadcast -a ADB_INPUT_TEXT --es msg 'Text'";
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo1).WaitForExit();
Может кто то реализовывал ? долгое нажатие + свайп вниз.
Задача банальная нажать и "потянуть" вниз по координатам.
С какой стороны зайти к данному вопросу?