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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Спасибо. Все работает. Ура
_________________________________________

Возможно кто то не просто знает, но и подскажет
Как в таком варианте подружить это все дело с MEMU а не с Nox ?
Что именно нужно подружить?
Вообще логика та же самая, что и для Nox. Только кубик получения Device с помощью PID немного другой, впринципе он не особо нужен, если реализуешь многопоток своим способом.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Что именно нужно подружить?
Вообще логика та же самая, что и для Nox. Только кубик получения Device с помощью PID немного другой, впринципе он не особо нужен, если реализуешь многопоток своим способом.
Да в том то и дело что со своими знаниями в с не реализую
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Да в том то и дело что со своими знаниями в с не реализую
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(?= )");
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Щедро, Спасибо
Но что то не хочет работать

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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Все работает
В коде заменил 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(?= )");
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
8.png



При вводе логина [email protected] , все что спереди обрезается до [email protected]

9.png


C#:
var a = project.Context["ADB"];

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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Посмотреть вложение 61984


При вводе логина [email protected] , все что спереди обрезается до [email protected]

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

C#:
var a = project.Context["ADB"];

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

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

Если не поможет, то у меня есть платное решение в ЛС.
 
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
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, Секунды
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Посмотреть вложение 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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Некоторые символы нужно экранировать с помощью символа "\"

Например |
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("|","\|"); //ввод текста
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
С ошибкой выполнение



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.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Можно ли по 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
 
Последнее редактирование:

ErikMoor

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

Значит это либо баг Мему, либо библиотеки. Вспоминается что у меня тоже были какие-то проблемы с Memu, работаю с Nox.
Не работает
Там вообще нет символов, это просто слово, к примеру логин Vasya3232,
В таком варианте
C#:
var a = project.Context["ADB"];

a.Text(project.Variables["Client"].Value); //ввод текста
записывает только 3232, вместо Vasya3232
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
12.png


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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Посмотреть вложение 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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Можно ли по xpath указать в какой блок вписать текст
Для примера нужно в писать Find friends текст Vasya32


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

text = Find friends
resource-id = com.microsoft.xboxone.smartglass:id/people_search_tag_input
class = android.widget.EditText
package = com.microsoft.xboxone.smartglass
можно node[@text='Find friends']
 
  • Спасибо
Реакции: ErikMoor

Szerzs

Client
Регистрация
15.06.2019
Сообщения
253
Благодарностей
68
Баллы
28
Будьте добры,подскажите пожалуйста,как сделать свайп справа на лево). Наоборот (на начальный экран) получается,а вправо почему то не идёт).
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
можно node[@text='Find friends']
Должно получится что то тип такого ?


C#:
var a = project.Context["ADB"];

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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Будьте добры,подскажите пожалуйста,как сделать свайп справа на лево). Наоборот (на начальный экран) получается,а вправо почему то не идёт).
Включи в настройках разработчика отображать тапы и поиграйся с координатами
 
  • Спасибо
Реакции: dsertr21

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Должно получится что то тип такого ?


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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18

Попробуй их 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);
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
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);
 

WLDN

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

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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Не работает
ни так в 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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Вероятно недостаточно хорошо. В шаблоне нет моментального ввода текста в нужную позицию а-ля кубик в Зенке. Нужно кликнуть, а потом ввести текст.
У меня перед этим идет кубик на клик в нужном месте
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

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Посмотреть вложение 62008

Не подскажите, как можно решить такое ?
Вписывает текст 23Usernoo, а надо как в переменной client - user23noo
Спасибо
Посмотрел, действительно в сторонних приложениях input text работает глючно в Memu. С этим ничего не сделаешь, я думаю.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Проверил, из 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!”
 
Последнее редактирование:

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
563
Баллы
93
Посмотреть вложение 62056


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


C#:
@echo off
memuc input -i 1 “TTV CiaranXI”

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

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
19.png


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

20.png
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Давай тогда вернемся к С
Если в фразе присутствует пробел, тогда не работает
А если пробела нет - все работает

Не работает
C#:
var a = project.Context["ADB"];
a.Text("Helo Friend"); //ввод текста
Работает
C#:
var a = project.Context["ADB"];
a.Text("Helo_Friend"); //ввод текста
 

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