『App自动化测试之Appium应用篇』| Appium常用API及操作

1 press_keycode

1.1 键盘操作

  • press_keycodeAppium的键盘相关函数;
  • 可以实现键盘的相关操作,比如返回、按键、音量调节等等;
  • 函数使用方法为:
python 复制代码
driver.press_keycode(KeyCode)

1.2 关于KeyCode

  • 以上press_keycode方法中传入参数KeyCode,而KeyCode是对应的键值码;
  • 其可以传入对应的键值名,也可以传入具体键值名的值(对应数字)。

1.3 press_keycode源码

  • press_keycode源码如下:
python 复制代码
    def press_keycode(self, keycode: int, metastate: Optional[int] = None, flags: Optional[int] = None) -> 'WebDriver':
        """Sends a keycode to the device.

        Android only. Possible keycodes can be found
        in http://developer.android.com/reference/android/view/KeyEvent.html.

        Args:
            keycode: the keycode to be sent to the device
            metastate: meta information about the keycode being sent
            flags: the set of key event flags

        Returns:
            Union['WebDriver', 'Keyboard']: Self instance
        """
        ext_name = 'mobile: pressKey'
        args = {'keycode': keycode}
        if metastate is not None:
            args['metastate'] = metastate
        if flags is not None:
            args['flags'] = flags
        try:
            self.assert_extension_exists(ext_name).execute_script(ext_name, args)
        except UnknownMethodException:
            # TODO: Remove the fallback
            self.mark_extension_absence(ext_name).execute(Command.PRESS_KEYCODE, args)
        return cast('WebDriver', self)
  • 从源码中可以看出,想要找到对应的键值名可以直接去官网查看。

1.4 电话键相关

  • 以下为部分(非全部,仅参考)电话键相关键值名:
键值名 说明 键值
KEYCODE_HOME HOME 3
KEYCODE_BACK 返回键 4
KEYCODE_CALL 拨号键 5
KEYCODE_EKDCALL 挂机键 6
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减减键 25
KEYCODE_POWER 电源键 26
KEYCODE_CAMERA 拍照键 27
KEYCODE_MENU 菜单键 82
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_SEARCH 搜索键 84

1.5 控制键相关

  • 以下为部分(非全部,仅参考)控制键相关键值名:
键值名 说明 键值
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_TAB TAB 61
KEYCODE_ENTER 回车键 66
KEYCODE_DEL 退格键 67
KEYCODE_ESCAPE ESC 111
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_SCROLL_LOCK 滚动锁定键 116

1.6 基本按键相关

  • 以下为部分(非全部,仅参考)基本按键相关键值名:
  • 其中按键0-9键值为7-16,比如:
键值名 说明 键值
KEYCODE_0 按键'0' 7
KEYCODE_1 按键'1' 8
KEYCODE_2 按键'2' 9
  • 其中字母A-Z的键值为29-54,比如:
键值名 说明 键值
KEYCODE_A 按键'A' 29
KEYCODE_B 按键'B' 30
KEYCODE_C 按键'C' 31

1.7 组合键相关

  • 以下为部分(非全部,仅参考)组合键相关键值名:
键值名 说明
KEYCODE_ALT_LEFT ALT+LIFT
KEYCODE_ALEERT_RIGHT ALT_RIGHT
KEYCODE_CTRL_LEFT Ctrl_lEFT
KEYCODE_CTRL_RIGHT Ctrl_RIGHT
KEYCODE_SHIFT_LEFT Shift+lEFT
KEYCODE_SHIFT_RIGHT Shift+RIGHT

1.8 符号键相关

  • 以下为部分(非全部,仅参考)符号键相关键值名:
键值名 说明
KEYCODE_PLUS 按键'+'
KEYCODE_MINUS 按键'-'
KEYCODE_STAR 按键'*'
KEYCODE_SLASH 按键'/'
KEYCODE_EQUALS 按键'='
KEYCODE_AT 按键'@'
KEYCODE_POUND 按键'#'
KEYCODE_SPACE 空格键

1.9 使用举例

  • 使用方法为:
python 复制代码
driver.press_keycode(4) # 返回键
driver.press_keycode(84) # 搜索键
  • 或者可以使用keyevent方法:
python 复制代码
driver.keyevent(66) # 回车键
driver.keyevent(67) # 退格键

2 swip方法

2.1 swip说明

  • swip()方法是从一个坐标位置滑动到另一个坐标位置;
  • 也就是说两点之间的滑动。

2.2 swip使用方法

  • 可以查看swip源码来看下如何使用:
python 复制代码
    def swipe(self, start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0) -> 'WebDriver':
        """Swipe from one point to another point, for an optional duration.

        Args:
            start_x: x-coordinate at which to start
            start_y: y-coordinate at which to start
            end_x: x-coordinate at which to stop
            end_y: y-coordinate at which to stop
            duration: defines the swipe speed as time taken to swipe from point a to point b, in ms.

        Usage:
            driver.swipe(100, 100, 100, 400)

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """
        touch_input = PointerInput(interaction.POINTER_TOUCH, "touch")

        actions = ActionChains(self)
        actions.w3c_actions = ActionBuilder(self, mouse=touch_input)
        actions.w3c_actions.pointer_action.move_to_location(start_x, start_y)
        actions.w3c_actions.pointer_action.pointer_down()
        if duration > 0:
            actions.w3c_actions = ActionBuilder(self, mouse=touch_input, duration=duration)
        actions.w3c_actions.pointer_action.move_to_location(end_x, end_y)
        actions.w3c_actions.pointer_action.release()
        actions.perform()
        return cast('WebDriver', self)
  • 从以上看需要至少四个参数swipe(self, start_x: int, start_y: int, end_x: int, end_y: int);

2.3 使用示例

  • 比如坐标从(100,200)滑动到(300,400):
python 复制代码
driver.swipe(100, 200, 300, 400)
  • 再比如从(400,500)滑动到(600,700)持续3秒:
python 复制代码
driver.swipe(400, 500, 600, 700, 3000)

3 scroll方法

  • scroll()方法是从一个元素滑动到另一个元素,直到页面自动停止;
  • 使用方法为:
python 复制代码
    def scroll(self, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> 'WebDriver':
        """Scrolls from one element to another

        Args:
            origin_el: the element from which to begin scrolling (center of element)
            destination_el: the element to scroll to (center of element)
            duration: defines speed of scroll action when moving from originalEl to destinationEl.
                Default is 600 ms for W3C spec.

        Usage:
            driver.scroll(el1, el2)
  • 比如从用户名滑动到密码输入框:
python 复制代码
user_name = driver.find_element(AppiumBy.XPATH, "//*[@text='用户名']")
user_passwd = driver.find_element(AppiumBy.XPATH, "//*[@text='密码']")
driver.scroll(user_name, user_passwd)

4 drag_and_drop方法

  • drag_and_drop()方法从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置;
  • 使用方法为:
python 复制代码
    def drag_and_drop(self, origin_el: WebElement, destination_el: WebElement) -> 'WebDriver':
        """Drag the origin element to the destination element

        Args:
            origin_el: the element to drag
            destination_el: the element to drag to

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """
  • 比如:
python 复制代码
user_name = driver.find_element(AppiumBy.XPATH, "//*[@text='用户名']")
user_passwd = driver.find_element(AppiumBy.XPATH, "//*[@text='密码']")
driver.drag_and_drop(user_name, user_passwd)

5 TouchAction方法

  • TouchAction可实现手势的操作,比如滑动、拖动、长按等操作;
  • 使用方法是先需要导入TouchAction
python 复制代码
from appium.webdriver.common.touch_action import  TouchAction

5.1 tap方法

  • tap()方法模拟手指对某个元素或坐标按下并快速抬起;
  • 使用方法为:
python 复制代码
    def tap(
        self,
        element: Optional['WebElement'] = None,
        x: Optional[int] = None,
        y: Optional[int] = None,
        count: int = 1,
    ) -> 'TouchAction':
        """Perform a tap action on the element

        Args:
            element: the element to tap
            x : x coordinate to tap, relative to the top left corner of the element.
            y : y coordinate. If y is used, x must also be set, and vice versa
  • 比如:
python 复制代码
TouchAction(driver).tap(user_name).perform()

5.2 press方法

  • press()方法是手指一直按下;
  • 使用方法:
python 复制代码
    def press(
        self,
        el: Optional['WebElement'] = None,
        x: Optional[int] = None,
        y: Optional[int] = None,
        pressure: Optional[float] = None,
    ) -> 'TouchAction':
        """Begin a chain with a press down action at a particular element or point

        Args:
            el: the element to press
            x: x coordiate to press. If y is used, x must also be set
            y: y coordiate to press. If x is used, y must also be set
  • 比如:
python 复制代码
TouchAction(driver).press(x=100, y=200).perform()

5.3 release方法

  • release()方法是模拟手指抬起;
  • 使用方法:
python 复制代码
    def release(self) -> 'TouchAction':
        """End the action by lifting the pointer off the screen

        Returns:
            `TouchAction`: Self instance
        """
        self._add_action('release', {})

        return self
  • 比如:
python 复制代码
TouchAction(driver).press(x=100, y=200).release().perform()

5.4 wait方法

  • wait()方法是模拟手指等待;
  • 使用方法为:
python 复制代码
 def wait(self, ms: int = 0) -> 'TouchAction':
        """Pause for `ms` milliseconds.

        Args:
            ms: The time to pause

        Returns:
            `TouchAction`: Self instance
        """
  • 比如按下等待3秒后抬起:
python 复制代码
TouchAction(driver).press(x=100, y=200).wait(3000).release().perform()

5.5 move_to方法

  • move_to()方法是模拟手指移动;
  • 使用方法:
python 复制代码
    def move_to(
        self, el: Optional['WebElement'] = None, x: Optional[int] = None, y: Optional[int] = None
    ) -> 'TouchAction':
        """Move the pointer from the previous point to the element or point specified

        Args:
            el: the element to be moved to
            x: x coordiate to be moved to. If y is used, x must also be set
            y: y coordiate to be moved to. If x is used, y must also be set

        Returns:
            `TouchAction`: Self instance
        """
  • 比如:
python 复制代码
TouchAction(driver).press(x=400, y=500).move_to(500, 600).perform()
相关推荐
Lee魅儿19 分钟前
ffmpeg webm 透明通道视频转成rgba图片
python·ffmpeg
Bi8bo724 分钟前
Python编程基础
开发语言·python
项目題供诗27 分钟前
黑马python(七)
python
是紫焅呢1 小时前
N数据分析pandas基础.py
python·青少年编程·数据挖掘·数据分析·pandas·学习方法·visual studio code
胖墩会武术2 小时前
Black自动格式化工具
python·格式化·black
struggle20252 小时前
DIPLOMAT开源程序是基于深度学习的身份保留标记对象多动物跟踪(测试版)
人工智能·python·深度学习
发现你走远了2 小时前
什么是状态机?状态机入门
python·状态机
可能是猫猫人3 小时前
【Python打卡Day39】图像数据与显存 @浙大疏锦行
开发语言·python
爬虫程序猿3 小时前
利用 Python 爬虫获取 Amazon 商品详情:实战指南
开发语言·爬虫·python
aiweker3 小时前
python web开发-Flask 重定向与URL生成完全指南
前端·python·flask