def text(text, enter=True, **kwargs): """ Input text on the target device. Text input widget must be active first. :param text: text to input, unicode is supported :param enter: input `Enter` keyevent after text input, default is True :return: None :platforms: Android, Windows, iOS :Example: >>> text("test") >>> text("test", enter=False) On Android, sometimes you need to click the search button after typing:: >>> text("test", search=True) .. seealso:: Module :py:mod:`airtest.core.android.ime.YosemiteIme.code` If you want to enter other keys on the keyboard, you can use the interface:: >>> text("test") >>> device().yosemite_ime.code("3") # 3 = IME_ACTION_SEARCH Ref: `Editor Action Code <http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html>`_ """ G.DEVICE.text(text, enter=enter, **kwargs) delay_after_operation()
def double_click(v): if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v G.DEVICE.double_click(pos) delay_after_operation()
def keyevent(keyname, **kwargs): """ Perform key event on the device :param keyname: platform specific key name :param **kwargs: platform specific `kwargs`, please refer to corresponding docs :return: None :platforms: Android, Windows, iOS """ G.DEVICE.keyevent(keyname, **kwargs) delay_after_operation()
def text(text, enter=True): """ Input text on the target device. Text input widget must be active first. :param text: text to input, unicode is supported :param enter: input `Enter` keyevent after text input, default is True :return: None :platforms: Android, Windows, iOS """ G.DEVICE.text(text, enter=enter) delay_after_operation()
def pinch(in_or_out='in', center=None, percent=0.5): """ Perform the pinch action on the device screen :param in_or_out: pinch in or pinch out, enum in ["in", "out"] :param center: center of pinch action, default as None which is the center of the screen :param percent: percentage of the screen of pinch action, default is 0.5 :return: None :platforms: Android """ G.DEVICE.pinch(in_or_out=in_or_out, center=center, percent=percent) delay_after_operation()
def hover(v): """ Perform mouse move and stop """ if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v G.DEVICE.hover(pos) delay_after_operation() return pos
def right_click(v): """ Perform right click """ if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v G.DEVICE.right_click(pos) delay_after_operation() return pos
def swipe(v1, v2=None, vector=None, **kwargs): """ Perform the swipe action on the device screen. There are two ways of assigning the parameters * ``swipe(v1, v2=Template(...))`` # swipe from v1 to v2 * ``swipe(v1, vector=(x, y))`` # swipe starts at v1 and moves along the vector. :param v1: the start point of swipe, either a Template instance or absolute coordinates (x, y) :param v2: the end point of swipe, either a Template instance or absolute coordinates (x, y) :param vector: a vector coordinates of swipe action, either absolute coordinates (x, y) or percentage of screen e.g.(0.5, 0.5) :param **kwargs: platform specific `kwargs`, please refer to corresponding docs :raise Exception: general exception when not enough parameters to perform swap action have been provided :return: Origin position and target position :platforms: Android, Windows, iOS :Example: >>> swipe(Template(r"tpl1606814865574.png"), vector=[-0.0316, -0.3311]) >>> swipe((100, 100), (200, 200)) Custom swiping duration and number of steps(Android and iOS):: >>> # swiping lasts for 1 second, divided into 6 steps >>> swipe((100, 100), (200, 200), duration=1, steps=6) """ if isinstance(v1, Template): pos1 = loop_find(v1, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos1 = v1 if v2: if isinstance(v2, Template): pos2 = loop_find(v2, timeout=ST.FIND_TIMEOUT_TMP) else: pos2 = v2 elif vector: if vector[0] <= 1 and vector[1] <= 1: w, h = G.DEVICE.get_current_resolution() vector = (int(vector[0] * w), int(vector[1] * h)) pos2 = (pos1[0] + vector[0], pos1[1] + vector[1]) else: raise Exception("no enough params for swipe") G.DEVICE.swipe(pos1, pos2, **kwargs) delay_after_operation() return pos1, pos2
def text(text, enter=True, **kwargs): """ Input text on the target device. Text input widget must be active first. :param text: text to input, unicode is supported :param enter: input `Enter` keyevent after text input, default is True :return: None :platforms: Android, Windows, iOS """ print(' 输入:', text) G.LOGGING.info('input text: %s' % text) G.DEVICE.text(text, enter=enter, **kwargs) delay_after_operation()
def keyevent(keyname, **kwargs): """ Perform key event on the device :param keyname: platform specific key name :param **kwargs: platform specific `kwargs`, please refer to corresponding docs :return: None :platforms: Android, Windows, iOS :Example: * ``Android``: it is equivalent to executing ``adb shell input keyevent KEYNAME`` :: >>> keyevent("HOME") >>> # The constant corresponding to the home key is 3 >>> keyevent("3") # same as keyevent("HOME") >>> keyevent("BACK") >>> keyevent("KEYCODE_DEL") .. seealso:: Module :py:mod:`airtest.core.android.adb.ADB.keyevent` Equivalent to calling the ``android.adb.keyevent()`` `Android Keyevent <https://developer.android.com/reference/android/view/KeyEvent#constants_1>`_ Documentation for more ``Android.KeyEvent`` * ``Windows``: Use ``pywinauto.keyboard`` module for key input:: >>> keyevent("{DEL}") >>> keyevent("%{F4}") # close an active window with Alt+F4 .. seealso:: Module :py:mod:`airtest.core.win.win.Windows.keyevent` `pywinauto.keyboard <https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html>`_ Documentation for ``pywinauto.keyboard`` * ``iOS``: Only supports home/volumeUp/volumeDown:: >>> keyevent("HOME") >>> keyevent("volumeUp") """ G.DEVICE.keyevent(keyname, **kwargs) delay_after_operation()
def touch(v, times=1, **kwargs): """ Perform the touch action on the device screen :param v: target to touch, either a Template instance or absolute coordinates (x, y) :param times: how many touches to be performed :param kwargs: platform specific `kwargs`, please refer to corresponding docs :return: None :platforms: Android, Windows, iOS """ if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v for _ in range(times): G.DEVICE.touch(pos, **kwargs) time.sleep(0.05) delay_after_operation()
def double_click(v): """ Perform double click :param v: target to touch, either a ``Template`` instance or absolute coordinates (x, y) :return: finial position to be clicked :Example: >>> double_click((100, 100)) >>> double_click(Template(r"tpl1606730579419.png")) """ if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v G.DEVICE.double_click(pos) delay_after_operation() return pos
def touch(v, **kwargs): """ Perform the touch action on the device screen :param v: target to touch, either a Template instance or absolute coordinates (x, y) :param kwargs: platform specific `kwargs`, please refer to corresponding docs :return: None :platforms: Android, Windows, iOS """ if isinstance(v, Template): try: pos = loop_find(v, timeout=ST.FIND_TIMEOUT) except TargetNotFoundError: raise else: try_log_screen() pos = v G.DEVICE.touch(pos, **kwargs) delay_after_operation()
def swipe(v1, v2=None, vector=None, **kwargs): """ Perform the swipe action on the device screen. There are two ways of assigning the parameters * ``swipe(v1, v2=Template(...))`` # swipe from v1 to v2 * ``swipe(v1, vector=(x, y))`` # swipe starts at v1 and moves along the vector. :param v1: the start point of swipe, either a Template instance or absolute coordinates (x, y) :param v2: the end point of swipe, either a Template instance or absolute coordinates (x, y) :param vector: a vector coordinates of swipe action, either absolute coordinates (x, y) or percentage of screen e.g.(0.5, 0.5) :param **kwargs: platform specific `kwargs`, please refer to corresponding docs :raise Exception: general exception when not enough parameters to perform swap action have been provided :return: None :platforms: Android, Windows, iOS """ if isinstance(v1, Template): pos1 = loop_find(v1, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos1 = v1 if v2: if isinstance(v2, Template): pos2 = loop_find(v2, timeout=ST.FIND_TIMEOUT_TMP) else: pos2 = v2 elif vector: if vector[0] <= 1 and vector[1] <= 1: w, h = G.DEVICE.get_current_resolution() vector = (int(vector[0] * w), int(vector[1] * h)) pos2 = (pos1[0] + vector[0], pos1[1] + vector[1]) else: raise Exception("no enough params for swipe") G.DEVICE.swipe(pos1, pos2, **kwargs) delay_after_operation()
def touch(v, times=1, **kwargs): """ Perform the touch action on the device screen :param v: target to touch, either a ``Template`` instance or absolute coordinates (x, y) :param times: how many touches to be performed :param kwargs: platform specific `kwargs`, please refer to corresponding docs :return: finial position to be clicked :platforms: Android, Windows, iOS :Example: Click absolute coordinates:: >>> touch((100, 100)) Click the center of the picture(Template object):: >>> touch(Template(r"tpl1606730579419.png", target_pos=5)) Click 2 times:: >>> touch((100, 100), times=2) Under Android and Windows platforms, you can set the click duration:: >>> touch((100, 100), duration=2) Right click(Windows):: >>> touch((100, 100), right_click=True) """ if isinstance(v, Template): pos = loop_find(v, timeout=ST.FIND_TIMEOUT) else: try_log_screen() pos = v for _ in range(times): G.DEVICE.touch(pos, **kwargs) time.sleep(0.05) delay_after_operation() return pos
def pinch(in_or_out='in', center=None, percent=0.5): """ Perform the pinch action on the device screen :param in_or_out: pinch in or pinch out, enum in ["in", "out"] :param center: center of pinch action, default as None which is the center of the screen :param percent: percentage of the screen of pinch action, default is 0.5 :return: None :platforms: Android :Example: Pinch in the center of the screen with two fingers:: >>> pinch() Take (100,100) as the center and slide out with two fingers:: >>> pinch('out', center=(100, 100)) """ try_log_screen() G.DEVICE.pinch(in_or_out=in_or_out, center=center, percent=percent) delay_after_operation()
def touch_pos(pos, times=1, **kwargs): for _ in range(times): G.DEVICE.touch(pos, **kwargs) time.sleep(0.05) delay_after_operation()