2 место Автоматизация Android без посредников. Часть 1.

Спасибо. Все работает. Ура
_________________________________________

Возможно кто то не просто знает, но и подскажет
Как в таком варианте подружить это все дело с MEMU а не с Nox ?
Что именно нужно подружить?
Вообще логика та же самая, что и для Nox. Только кубик получения Device с помощью PID немного другой, впринципе он не особо нужен, если реализуешь многопоток своим способом.
 
Что именно нужно подружить?
Вообще логика та же самая, что и для Nox. Только кубик получения Device с помощью PID немного другой, впринципе он не особо нужен, если реализуешь многопоток своим способом.
Да в том то и дело что со своими знаниями в с не реализую
 
Да в том то и дело что со своими знаниями в с не реализую
Get Pid Memu:
Развернуть Свернуть Копировать
lock(SyncObject) {
var gbVar = project.GlobalVariables["Droxy", "process"];
Process[] processes = Process.GetProcessesByName("MEmuHeadless");
var ids = processes.Select(p => p.Id);
string process = "";
foreach(int processId in ids){
    //project.SendInfoToLog(processId.ToString());
    process = processId.ToString();
    if (project.Variables["process"].Value == String.Empty && !project.GlobalVariables["Droxy", "process"].Value.ToString().Contains(process)){
        project.Variables["process"].Value = process;
        gbVar.Value = gbVar.Value + process + ";";
        return process;
        }
}
throw new Exception("Нет свободных эмуляторов");
}

Get Device Memu:
Развернуть Свернуть Копировать
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine(String.Format("netstat -a -n -o | find \"{0}\" | findstr \"21.*3\"",project.Variables["process"].Value));

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

return "127.0.0.1:" + Regex.Match(cmd.StandardOutput.ReadToEnd(), "(?<=127.0.0.1:)21.*3(?= )");
 
Щедро, Спасибо
Но что то не хочет работать

Выполнение действия CSharp OwnCode: Get Pid Memo. Глобальная переменная Droxy.process не инициализирована

При этом я не могу найти Глобальные переменные
7.png
 
Все работает
В коде заменил Droxy на Zappium в 2х местах

Get Pid Memo:
Развернуть Свернуть Копировать
lock(SyncObject) {
var gbVar = project.GlobalVariables["Zappium", "process"];
Process[] processes = Process.GetProcessesByName("MEmuHeadless");
var ids = processes.Select(p => p.Id);
string process = "";
foreach(int processId in ids){
    //project.SendInfoToLog(processId.ToString());
    process = processId.ToString();
    if (project.Variables["process"].Value == String.Empty && !project.GlobalVariables["Zappium", "process"].Value.ToString().Contains(process)){
        project.Variables["process"].Value = process;
        gbVar.Value = gbVar.Value + process + ";";
        return process;
        }
}
throw new Exception("Нет свободных эмуляторов");
}


Get Device Memo:
Развернуть Свернуть Копировать
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine(String.Format("netstat -a -n -o | find \"{0}\" | findstr \"21.*3\"",project.Variables["process"].Value));

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

return "127.0.0.1:" + Regex.Match(cmd.StandardOutput.ReadToEnd(), "(?<=127.0.0.1:)21.*3(?= )");
 
8.png



При вводе логина text3@outlook.com , все что спереди обрезается до 3@outlook.com

9.png


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

a.Text(project.Variables["login"].Value); //ввод текста
 
Посмотреть вложение 61984


При вводе логина text3@outlook.com , все что спереди обрезается до 3@outlook.com

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

C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

a.Text(project.Variables["login"].Value); //ввод текста
Некоторые символы нужно экранировать с помощью символа "\"

Например |
a.Text(project.Variables["login"].Value).Replace("|","\|"); //ввод текста

Если не поможет, то у меня есть платное решение в ЛС.
 
  • Спасибо
Реакции: ErikMoor
var a = project.Context["ADB"];

project.Lists["parse"].AddRange(a.Parse("//node[contains(@package,'com.microsoft.xboxone.smartglass') and @index='0']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды

Синтаксис не верный был для contains.

10.png


Надо спарсить Let's play! в список

Но не одни из этих строк не работает
Подскажите, что не так?


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

project.Lists["parse"].AddRange(a.Parse("//node[contains(@resource-id,'confirm-button')]", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
project.Lists["parse"].AddRange(a.Parse("//node[contains(@package,'com.microsoft.xboxone.smartglass') and @index='0']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
project.Lists["parse"].AddRange(a.Parse("//node[@package='com.microsoft.xboxone.smartglass' and @index='0']", "text", 0, 5); //XPath, какой аттрибут парсить, Index, Секунды
 
Посмотреть вложение 61993

Надо спарсить Let's play! в список

Но не одни из этих строк не работает
Подскажите, что не так?


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

project.Lists["parse"].AddRange(a.Parse("//node[contains(@resource-id,'confirm-button')]", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
project.Lists["parse"].AddRange(a.Parse("//node[contains(@package,'com.microsoft.xboxone.smartglass') and @index='0']", "text", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды
project.Lists["parse"].AddRange(a.Parse("//node[@package='com.microsoft.xboxone.smartglass' and @index='0']", "text", 0, 5); //XPath, какой аттрибут парсить, Index, Секунды
project.Lists["parse"].AddRange(a.Parse("//node[contains(@resource-id,'confirm-button')]", "content-desc", 0, 5)); //XPath, какой аттрибут парсить, Index, Секунды

Не указал нужный атрибут content-desc. У тебя нужный текст находится именно в нём.
 
  • Спасибо
Реакции: dsertr21 и ErikMoor
Некоторые символы нужно экранировать с помощью символа "\"

Например |
a.Text(project.Variables["login"].Value).Replace("|","\|"); //ввод текста

Если не поможет, то у меня есть платное решение в ЛС.

С ошибкой выполнение
Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 4; Cтолбец: 57]


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

//a.Text(project.Variables["Client"].Value); //ввод текста

a.Text(project.Variables["Client"].Value).Replace("|","\|"); //ввод текста

-----------------------------
При этом варианте, все буквы до первой цифры удаляются. К примеру в переменной Client значение Vasya32
В строку оно пишет только 32

C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

a.Text(project.Variables["Client"].Value); //ввод текста

//a.Text(project.Variables["Client"].Value).Replace("|","\|"); //ввод текста
 
С ошибкой выполнение



C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

//a.Text(project.Variables["Client"].Value); //ввод текста

a.Text(project.Variables["Client"].Value).Replace("|","\|"); //ввод текста

-----------------------------
При этом варианте, все буквы до первой цифры удаляются. К примеру в переменной Client значение Vasya32
В строку оно пишет только 32

C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

a.Text(project.Variables["Client"].Value); //ввод текста

//a.Text(project.Variables["Client"].Value).Replace("|","\|"); //ввод текста
Это было для примера, я не знаю какие там символы у тебя.
a.Text(project.Variables["Client"].Value).Replace(@"|",@"\|"); //ввод текста
Так может быть. Потестируй.

Значит это либо баг Мему, либо библиотеки. Вспоминается что у меня тоже были какие-то проблемы с Memu, работаю с Nox.
 
Можно ли по xpath указать в какой блок вписать текст
Для примера нужно в писать Find friends текст Vasya32


11.png


text = Find friends
resource-id = com.microsoft.xboxone.smartglass:id/people_search_tag_input
class = android.widget.EditText
package = com.microsoft.xboxone.smartglass
 
Последнее редактирование:
Это было для примера, я не знаю какие там символы у тебя.
a.Text(project.Variables["Client"].Value).Replace(@"|",@"\|"); //ввод текста
Так может быть. Потестируй.

Значит это либо баг Мему, либо библиотеки. Вспоминается что у меня тоже были какие-то проблемы с Memu, работаю с Nox.

Не работает
Там вообще нет символов, это просто слово, к примеру логин Vasya3232,
В таком варианте
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

a.Text(project.Variables["Client"].Value); //ввод текста

записывает только 3232, вместо Vasya3232
 
12.png


Не подскажите, как можно решить такое ?
Вписывает текст 23Usernoo, а надо как в переменной client - user23noo
Спасибо
 
Посмотреть вложение 62008

Не подскажите, как можно решить такое ?
Вписывает текст 23Usernoo, а надо как в переменной client - user23noo
Спасибо

Попробуй их memuc , в гугле нашёл.

Input text to Android
  • Usage: memuc input <-i vmindex | -n vmname> <text>
  • Sample: memuc input -i 0 “Hello World!” //Input “Hello World!” text into MEmu VM
a.Command("memuc input -i 0 'Hello World!'", false);
что-то в этом роде
 
  • Спасибо
Реакции: trecho и ErikMoor
  • Спасибо
Реакции: ErikMoor
Будьте добры,подскажите пожалуйста,как сделать свайп справа на лево). Наоборот (на начальный экран) получается,а вправо почему то не идёт).
 
можно node[@text='Find friends']

Должно получится что то тип такого ?


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

project.Variables["Client"].Value(a.Text("//node[@text='Find friends' ]", "text", 0, 5)); //XPath, какой аттрибут парсить,
 
Будьте добры,подскажите пожалуйста,как сделать свайп справа на лево). Наоборот (на начальный экран) получается,а вправо почему то не идёт).
Включи в настройках разработчика отображать тапы и поиграйся с координатами
 
  • Спасибо
Реакции: dsertr21
Должно получится что то тип такого ?


C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];

project.Variables["Client"].Value(a.Text("//node[@text='Find friends' ]", "text", 0, 5)); //XPath, какой аттрибут парсить,
a.Click("//node[@text='Find friends']", 0, 5);

Я понимаю, что это займет время какое-то, и у нас его обычно не хватает, но попробуй выделить пару часов, чтобы досконально понять какие кубики за что отвечают, это сэкономит кучу времени в будущем.

И ещё можно чекнуть комментарии, чтобы понять как составляются пути до элементов.
 
  • Спасибо
Реакции: ErikMoor

Попробуй их memuc , в гугле нашёл.

Input text to Android
  • Usage: memuc input <-i vmindex | -n vmname> <text>
  • Sample: memuc input -i 0 “Hello World!” //Input “Hello World!” text into MEmu VM
a.Command("memuc input -i 0 'Hello World!'", false);
что-то в этом роде

Не работает
ни так в cmd memuc input -i 0 “Hello World!”

ни так в projectmaker, работает без ошибки но ничего не происходит
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Command("memuc input -i 0 'Hello World!'", false);

вот так работает с ошибкой
Компиляция кода Ошибка в действии "CS0103" "Имя "a" отсутствует в текущем контексте". [Строка: 1; Cтолбец: 1]
C#:
Развернуть Свернуть Копировать
a.Command("memuc input -i 0 'Hello World!'", false);
 
a.Click("//node[@text='Find friends']", 0, 5);

Я понимаю, что это займет время какое-то, и у нас его обычно не хватает, но попробуй выделить пару часов, чтобы досконально понять какие кубики за что отвечают, это сэкономит кучу времени в будущем.

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

С этим я разобрался уже давно, спасибо кликает как надо, но видимо Вы не поняли что мне надо
Мне надо не click
a.Click("//node[@text='Find friends']", 0, 5);

а text, а точнее найти елемен по xpath куда вписать текст из переменной client
a.Text("//node[@text='Find friends']", 0, 5);
 
С этим я разобрался уже давно, спасибо кликает как надо, но видимо Вы не поняли что мне надо
Мне надо не click
a.Click("//node[@text='Find friends']", 0, 5);

а text, а точнее найти елемен по xpath куда вписать текст из переменной client
a.Text("//node[@text='Find friends']", 0, 5);
Вероятно недостаточно хорошо. В шаблоне нет моментального ввода текста в нужную позицию а-ля кубик в Зенке. Нужно кликнуть, а потом ввести текст.
 
Не работает
ни так в cmd memuc input -i 0 “Hello World!”

ни так в projectmaker, работает без ошибки но ничего не происходит
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Command("memuc input -i 0 'Hello World!'", false);

вот так работает с ошибкой

C#:
Развернуть Свернуть Копировать
a.Command("memuc input -i 0 'Hello World!'", false);
Проверил, из cmd работает следующим образом. Сам memuc находится в папке с Memu:
У меня здесь
cd C:\Program Files (x86)\Microvirt\MEmu
memuc input -i n “Hello World!”, где n - номер запущенного инстанса. Можно батником на время приспособить. Или через кубик с CMD запустить по аналогии Get Device - это более удобное решение, но нужно будет разобраться.
 
Последнее редактирование:
  • Спасибо
Реакции: ErikMoor
Вероятно недостаточно хорошо. В шаблоне нет моментального ввода текста в нужную позицию а-ля кубик в Зенке. Нужно кликнуть, а потом ввести текст.
У меня перед этим идет кубик на клик в нужном месте
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Click("//node[@text='Find friends' and @package='com.microsoft.xboxone.smartglass']", 0, 10); //XPath, Index, Секунды

а уже потом проблема с вводом текста
но проблема решена


C#:
Развернуть Свернуть Копировать
cd C:\Program Files (x86)\Microvirt\MEmu
memuc input -i n “Hello World!”, где n - номер запущенного инстанса. Можно батником на время приспособить.

в таком варианте работает
СПАСИБО тебе большое
 
  • Спасибо
Реакции: WLDN
Посмотреть вложение 62008

Не подскажите, как можно решить такое ?
Вписывает текст 23Usernoo, а надо как в переменной client - user23noo
Спасибо
Посмотрел, действительно в сторонних приложениях input text работает глючно в Memu. С этим ничего не сделаешь, я думаю.
 
Проверил, из cmd работает следующим образом. Сам memuc находится в папке с Memu:
У меня здесь
cd C:\Program Files (x86)\Microvirt\MEmu
memuc input -i n “Hello World!”, где n - номер запущенного инстанса. Можно батником на время приспособить. Или через кубик с CMD запустить по аналогии Get Device - это более удобное решение, но нужно будет разобраться.

17.png



Если запускать с открытого окна cmd, все вводится верно
Но если запускать батник который лежит по этому же пути c:\Program Files (x86)\Microvirt\MEmu\1.bat


C#:
Развернуть Свернуть Копировать
@echo off
memuc input -i 1 “Hello World!”


С таким батником, все так же

C#:
Развернуть Свернуть Копировать
@echo off
cd C:\Program Files (x86)\Microvirt\MEmu
memuc input -i 1 “Hello World!”
 
Последнее редактирование:
Посмотреть вложение 62056


Если запускать с открытого окна cmd, все вводится верно
Но если запускать батник который лежит по этому же пути c:\Program Files (x86)\Microvirt\MEmu\1.bat


C#:
Развернуть Свернуть Копировать
@echo off
memuc input -i 1 “TTV CiaranXI”


то получается, что то вот так
В батниках плохо разбираюсь, не смогу подсказать.
 
19.png


Результат после ввода отличается, когда запускаешь батник с папки проекта или с папки memu
Возможно кто то подскажет как с этим бороться ?

20.png
 
Давай тогда вернемся к С
Если в фразе присутствует пробел, тогда не работает
А если пробела нет - все работает

Не работает
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Text("Helo Friend"); //ввод текста

Работает
C#:
Развернуть Свернуть Копировать
var a = project.Context["ADB"];
a.Text("Helo_Friend"); //ввод текста
 

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