Button和Label的交互¶
poco中的UI对象只是一个 代理 ,下面例子将展示UI代理的常用方法,通过UI代理可以很容易获取在game/app中的具体属性值。
Click and long click¶
最简单的操作就是点击(click),也可以长按(long click),按多久都行,下面例子展示点击和长按各自的效果。
# coding=utf-8
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco('btn_start').click()
poco('basic').click()
poco('star_single').long_click()
poco('star_single').long_click(duration=5)
Get and set attributes¶
下面例子在多个功能点上展示如何与按钮和文本框交互,包括读取和设置UI的属性
# coding=utf-8
import time
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco('btn_start').click()
poco(text='basic').click()
star = poco('star_single')
if star.exists():
pos = star.get_position()
input_field = poco('pos_input')
time.sleep(1)
input_field.set_text('x={:.02f}, y={:.02f}'.format(*pos)) # very fast
time.sleep(3)
title = poco('title').get_text()
if title == 'Basic test':
back = poco('btn_back', type='Button')
back.click()
back.click()
Existence test¶
如果从一个不存在的UI里读取属性值或者操作它,会触发异常,如果你不确定那个UI是否存在,可以调用 .exists()
来判断。在具体的测试用例中,如果因为UI不存在出现了异常,这很有可能是game/app的bug,不要强行忽略。
# coding=utf-8
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
btn = poco('btn_start')
btn.click()
print(btn.get_text()) # => 'Start'
intro = poco('introduction')
print(intro.get_text()) # => 'xxxx'
print(intro.attr('text')) # => 'xxxx'
print(intro.attr('type')) # => 'Text'
print(intro.attr('texture')) # => None. Because there is no texture on Text.
print(intro.attr('foo-bar')) # => None. Because "intro" dose not have an attribute named "foo-bar".
intro.click() # Perform a click on any UI objects are allowed.
obj = poco('foo-bar', type='FooBar')
print(obj.exists()) # => False. This UI does not exist actually
invisible_obj = poco('result_panel', type='Layer')
print(invisible_obj.exists()) # => False. This UI is not visible to user.
更多示例: