Перейти к содержанию

[AirtestIDE , Python] Сопрограммы


Рекомендуемые сообщения

Версия Python 3.5.3

 

В Python плохо шарю. Ищу варианты написания сопрограмм и предлагаю желающим помочь мне с кодом на Python 

 

Исходник

Спойлер

# -*- encoding=utf8 -*-
__author__ = "gzliuxin"
__title__ = "test script title"
__desc__ = """
this is a test script.
"""

# install demo apk
PKG = "com.NetEase.PocoDemo"
if PKG not in device().list_app():
    import os
    path = os.path.join(args.script, "poco-demo.apk")
    device().install_app(path)

# restart app
stop_app(PKG)
start_app(PKG)
wait(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080)))

# init UnityPoco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

poco(text="Start").click()
poco(text="basic").click()

# assert empty
result = poco(type="Text", name="Text").get_text()
assert_equal(bool(result), False)

# input text
poco(type="InputField").set_text("Hello World")
sleep(1.0)

# assert text 
result = poco(type="Text", name="Text").get_text()
assert_equal(result, "Hello World")

poco(text="Back").click()

image.png

 

Вопрос1. Как выполнять отдельной сопрограммой код ниже или любой другой на Python 3.5.3?

wait(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080)))

if exists(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080))):
	poco(text="Start").click()

 

Попытка из Гугла

Спойлер

import asyncio

@asyncio.coroutine
def hello_world():
    print("Hello World!")

loop = asyncio.get_event_loop()
# Blocking call which returns when the hello_world() coroutine is done
loop.run_until_complete(hello_world())
loop.close()

 

 

Ошибка с импортом модуля:

Спойлер

image.png

 

Вопрос2. Как импортировать этот модуль? Или через другой код сопрограмм

Ссылка на комментарий
Поделиться на другие сайты

@srg91

Привет. Запустил. Логи

Спойлер
Цитата

[Start running..]
do not connect device
save log in 'C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40'
[12:09:22][DEBUG]<airtest.core.android.adb> C:\AirtestIDE\airtest\core\android\static\adb\windows\adb.exe devices
[12:09:22][DEBUG]<airtest.core.android.adb> C:\AirtestIDE\airtest\core\android\static\adb\windows\adb.exe devices
3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)]
----------------------------------------------------------------------
Ran 1 test in 0.303s

OK
[Finished]

 

 

Ссылка на комментарий
Поделиться на другие сайты

15 минут назад, MasterGH сказал:

@srg91

Привет. Запустил. Логи

 

Не очень понимаю как ты запускаешь. Ты не мог бы найти команду, которой запускается твой скрипт?

 

Можно попробовать сделать что-то подобное:

import sys
raise Exception(sys.executable)

 

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, MasterGH сказал:

Команду я не знаю как найти.  Запуск через кнопку, как обычно. Скриншот

Ответить смогу только завтра, надо отойти

 

Можно попробовать вот так запустить, тогда он почти точно выведет что запускается:

import sys
message = 'Executable: {}\nVersion: {}'.format(sys.executable, sys.version)
raise Exception(message)

 

Единственное, судя по всему это некий встраиваемый питон, я не уверен что у него будут доступны все модули, которые имеет оригинальный.

Поэтому возможно он просто не поддерживает корутины.

Напомни, пожалуйста, где взять приложение через которое ты запускаешь? Чтобы можно было руками потыкать.

Ссылка на комментарий
Поделиться на другие сайты

18 часов назад, srg91 сказал:

Напомни, пожалуйста, где взять приложение через которое ты запускаешь?

Есть версия и под Mac (последняя 0.1.3)

 

Запустил

import sys
message = 'Executable: {}\nVersion: {}'.format(sys.executable, sys.version)
raise Exception(message)

Результат

Спойлер

image.png

 

Ссылка на комментарий
Поделиться на другие сайты

 

8 минут назад, MasterGH сказал:

Запустил

 

Да, супер, отработало как нужно - версия запускаемого питона - 3.5.3;

В общем запускает его сам AirtestIDE, но как я и говорил встроенный в него Python не умеет в asyncio (но я не разбирался подробно, возможно я не прав).

Да и рекоммендуют они использовать синтаксис Python 2.7: http://airtest.netease.com/docs/docs_AirtestIDE-en_US/3_faq/script_related_faqs.html?highlight=python#which-python-version-is-supported

 

Но! Насколько я вижу по тому что FAQ, можно запускать скрипты через отдельно установленный Python

Поэтому можно попробовать поставить обычный Python, проверить что в нём работает asyncio, доустановить нужные AirtestIDE модули и указать его как основной для AirtestIDE.

Если ты готов, то можем попробовать сделать это так ) 

  • Понравилось 1
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, srg91 сказал:

Поэтому можно попробовать поставить обычный Python, проверить что в нём работает asyncio, доустановить нужные AirtestIDE модули и указать его как основной для AirtestIDE.

 

Поставил. Логи

Спойлер

image.png

 

Спойлер


"C:\AirtestIDE\AirtestIDE" runner "C:\AirtestIDE\Scripts Poco\DELETE.air"  --log "C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40"
============================================================

[Start running..]
add sys.path:
['C:\\Python27\\Lib']
do not connect device
save log in 'C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40'
======================================================================
[Finished]
ERROR: setUpClass (app.widgets.code_runner.ide_launcher.AirtestIDECase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "airtest\cli\runner.py", line 28, in setUpClass
  File "airtest\cli\runner.py", line 133, in setup_by_args
  File "airtest\core\api.py", line 105, in auto_setup
  File "airtest\core\api.py", line 62, in connect_device
  File "airtest\core\api.py", line 31, in init_device
  File "airtest\core\helper.py", line 108, in import_device_cls
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\core\android\android.py", line 10, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\core\android\ime.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\core\android\yosemite.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\utils\apkparser\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\utils\apkparser\apk.py", line 20, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "airtest\utils\apkparser\axmlprinter.py", line 23, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "xml\sax\saxutils.py", line 6, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "urllib\request.py", line 88, in <module>
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
  File "http\client.py", line 1218, in <module>
  File "C:\Python27\Lib\ssl.py", line 134
    except socket_error, e:
                       ^
SyntaxError: invalid syntax

----------------------------------------------------------------------
Ran 0 tests in 0.060s

FAILED (errors=1)


============================================================

 

 

 

Я думаю мы с этой проблемой очень много времени и сил потратим. По этому забьем. 

 

Я думаю, сделаю свою функцию ожидания распознавания картинки и в ней впишу try/catch и проверку на картинки случайных диалогов.

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.