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的属性

../../../_images/interact_with_buttons_and_labels.gif
# 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.

更多示例: