首页 > 其他分享 >『App自动化测试之Appium应用篇』| Appium常用API及操作

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

时间:2024-01-02 16:35:46浏览次数:29  
标签:Appium int App driver element API 键值 press KEYCODE

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

1 press_keycode

1.1 键盘操作

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

1.2 关于KeyCode

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

1.3 press_keycode源码

  • press_keycode源码如下:
    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 使用举例

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

2 swip方法

2.1 swip说明

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

2.2 swip使用方法

  • 可以查看swip源码来看下如何使用:
    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):
driver.swipe(100, 200, 300, 400)
  • 再比如从(400,500)滑动到(600,700)持续3秒:
driver.swipe(400, 500, 600, 700, 3000)

3 scroll方法

  • scroll()方法是从一个元素滑动到另一个元素,直到页面自动停止;
  • 使用方法为:
    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)
  • 比如从用户名滑动到密码输入框:
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()方法从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置;
  • 使用方法为:
    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
        """
  • 比如:
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
from appium.webdriver.common.touch_action import  TouchAction

5.1 tap方法

  • tap()方法模拟手指对某个元素或坐标按下并快速抬起;
  • 使用方法为:
    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
  • 比如:
TouchAction(driver).tap(user_name).perform()

5.2 press方法

  • press()方法是手指一直按下;
  • 使用方法:
    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
  • 比如:
TouchAction(driver).press(x=100, y=200).perform()

5.3 release方法

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

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

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

5.4 wait方法

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

        Args:
            ms: The time to pause

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

5.5 move_to方法

  • move_to()方法是模拟手指移动;
  • 使用方法:
    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
        """
  • 比如:
TouchAction(driver).press(x=400, y=500).move_to(500, 600).perform()

标签:Appium,int,App,driver,element,API,键值,press,KEYCODE
From: https://blog.51cto.com/NoamaNelson/9070985

相关文章

  • 实时获取化工网商品详情API数据
    在当今的信息化时代,数据的获取和分析对于企业的发展至关重要。特别是在化工行业,实时的商品详情数据可以帮助企业快速了解市场动态、制定合理采购策略和进行精准营销。化工网API提供了一种便捷的方式,帮助开发者获取化工商品的实时详情。一、API介绍化工网API(ApplicationProgramming......
  • 专业做app软件开发公司有哪些
    做app软件开发的公司有很多,以下是一些比较知名的公司:华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在开发、建设到运营推广领域拥有丰富经验,在教育,医疗,APP,管理,商城,人工智能,ERP,系统二次开发,CRM等领......
  • 安卓期末大作业(AndroidStudio开发),垃圾分类app,代码有注释,能正常运行
    1 项目基本信息1.1 项目名称垃圾分类助手APP的设计与实现1.2开发运行环境开发语言:Java开发工具:AndroidStudio模拟器:雷电模拟器9数据库:SQLite  1.3使用的核心类及组件Activity:作为实现界面的窗体类BaseAdapter:适配器类SqliteOpenHelper:数据库类Intent:页面跳转传值Fragmen......
  • 安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行
    安卓期末大作业-日记本app(附下载链接)压缩包内包含源代码,运行各个界面截图,一条日记可以记录2000字符以下的文本、最多8张配图和最多8个视频。每条日记都可以以评论的形式或转发引用的形式追更,评论的最大长度也是2000字符。日记还可以同时记录所处位置和当时的天气情况(当然,现在并......
  • 中国app系统开发公司前十名,排行榜
    对于app系统开发公司前十名排行榜,并没有一个官方的排名结果。这是因为app开发公司的排名受到多种因素的影响,如公司规模、技术实力、项目经验、服务质量等等。因此,很难给出一个准确的排名结果。华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致......
  • 2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文件
    2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文件)打包文件如下图所示:基于Android系统的简单记事本,它能够便携记录生活和工作的诸多事情,从而帮助人们有条理的进行时间管理。一个记事本,能够输入标题和内容,创建日期、最新修改日期等信息。如果没......
  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)
    AndroidStudio开发项目图书管理系统项目视频展示:引言现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的重要场所,作为信息资源的集散地,图书和用户借阅资......
  • 安卓期末大作业-记账app(含源码+导出app+运行截图)安卓期末大作业-记账app(含源码+导出ap
    安卓期末大作业-记账app(含源码+导出app+运行截图)开发软件:AndroidStudio开发语言:Java2023年上半年移动开发期末大作业记账app,老师给了95分,可以记录各种类型的账目支出记录,收入记录,存储到数据库中,可以隐藏账目记录,可以记录和删除记录,还可以将收支记录转图表分析,也可清空所有数据。具......
  • 2023Android安卓期末大作业-纪念日APP
    Android安卓期末大作业-纪念日APP“我们”,记录结婚纪念日也可以作为备忘录APPapp启动截图:APP打开首页可以修改日期部分代码publicvoidinitView(){ImmersionBar.with(this).statusBarDarkFont(true)//状态栏字体是深色,不写默认为亮色......
  • SMTP发送邮件有什么方法?API接口发信
    SMTP发送邮件一直是网络通信中的重要环节之一,特别是在电子邮件领域。通过SMTP协议,用户可以方便地发送和接收电子邮件。本文将探讨SMTP发送邮件的方法,以及通过API接口进行邮件发送的相关内容。SMTP发送邮件的基本原理在介绍方法之前,我们首先来了解一下SMTP发送邮件的基本原理。SMTP,......