appium框架

appium

(仅作为个人笔记,如有雷同,请联系删除。。)

1、App 三种类型:

  1. 原生应用程序:
  2. 混合应用程序:
  3. web版APP:

2、Anrdiod SDK:软件开发工具包。

官网下载:https://android-sdk.en.softonic.com/download
网盘下载:https://tools.android-studio.org/index.php/sdk

  1. 安装完成,设置环境变量。
  2. 双击SDK Manage.exe 启动SDK管理器,下载Tools/Android SDK Tools、Android SDK Platform-tools、Android SDK Build-tools, Android 10/SDK Platform,Extras/Google USB Driver、Extras/Google Web Driver

3、安装安卓模拟器:

www.yeshen.com

4、安装 appium Server:

https://pan.baidu.com/s/1pKMwdfX

或者appium-desktop:https://github.com/appium/appium-desktop/releases ,用来运行Appium 自动化测试脚本

5、appium测试步骤:

启动Android模拟器,启动 Appium Server,点击启动 Appium Server右上角 三角 按钮,运行测试脚本。
本质上,只需要本地adb connect 连接上模拟器或者真机,亦或者云真机,appium即可访问到APP。

6、APP定位控件:

  1. appium 的 appium inspector
    (1). adb connect 连接Android机器;
    (2). 启动 Appium Server,点击搜索按钮对机型、包名等进行配置;
    appium框架_第1张图片
    appium框架_第2张图片
    (3). 点击start session按钮连接到Android界面进行定位。

  2. python 版 uiAutomator2 中的 weditor:【注意:实测与其他两个相互冲突】

    1. 安装:pip install --pre weditor

    2. 使用:python -m weditor

      注意:使用运行weditor时会在连接设备中自动安装一个ATX的app,这个App与uiAutomator2冲突,在运行代码时会产生报错。解决方法时运行代码前删除ATX app。ATX只在元素定位时有用。

  3. Chrome Inspect:Chrome提供的一个移动端Web开发调试工具。【没用过,有空研究研究】

  4. uiautomatorviewer.bat,在 Android SDK 的 /tools/bin/ 目录下。 运行uiautomatorviewer.bat,安卓模拟器打开APP,点击uiautomatorviewer中左上第二个按钮,模拟器屏幕截图会出现在uiautomatorviewer左下角,单击截图上的元素,右下角会出现元素的各种属性值。

    缺点:每个界面都要截图才能进行元素定位。
    appium框架_第3张图片

7、APP的定位方法:【参考web的selenium定位,都差不多】

  1. id 定位driver.findElement(By.id("resource-id属性值"))

    eg:driver.findElement(By.id(“com.android.calculator2:id/formula”))

  2. name 定位driver.findElement(By.name("元素text属性值"))

    eg:driver.findElement(By.name(“9”))

  3. class nama 定位driver.findElclassNment(By.className("class属性值"))

    eg:driver.findElement(By.className(“android.widget.Button”))

  4. XPath定位driver.findElement(By.xpath("xxx"))

    eg:driver.findElement(By.xpath(“//android.view.ViewGroup/android.widget.Button”))

  5. Accessibility ID定位driver.findElementByAccessibilityId("元素的contentDescription属性值"),即元素的元素的 content-desc值

    eg:driver.findElementByAccessibilityId(“plus”)

  6. android uiautomator定位driver.findElementByAndroidUIAutomator("xxx"),元素的任意属性都可以通过android uiautomator方法来进行定位,但要保证这种定位方式的唯一性

    eg : driver.findElementByAndroidUIAutomator(“new UiSelector().text(\“clr\”)”)
    driver.findElementByAndroidUIAutomator(“new UiSelector().text(8\”)")
    driver.findElementByAndroidUIAutomator(“new UiSelector().description(\“plus\”)”)
    注:description() 方法用的是content-desc属性

8、API 应用操作:

  1. 安装应用:installApp() —>需要apk包的路径

      eg:driver.installApp("path/to/my.apk")
          driver.installApp("D:\\\\android\\\\apk\\\\ContactManager.apk")
    
  2. 卸载应用:removeApp()

      eg:driver.removeApp("com.example.android.apis")
    
  3. 关闭应用:closeApp()—>默认关闭当前打开的应用,不需要入参。并非真正的关闭应用,相当于按home键将应用置于后台,可以通过launchApp()再次启动

  4. 启动应用:launchApp() —>需要配合closeApp()使用

      eg:driver.closeApp(); driver.launchApp()
    
  5. 检查应用是否安装:isAppInstalled()—>需要传参应用包的名字。返回结果为Ture或False

      eg:driver.isAppInstalled('com.example.android.apis')
    
  6. 将应用置于后台:runAppInBackground()—>需要入参,需要指定应用置于后台的时长

      eg:driver.runAppInBackground(2)
    
  7. 应用重置:resetApp()—>重置当前被测程序到出始化状态。该方法不需要入参

      eg:driver.resetApp()
    

9、API 上下文操作:

  1. 获取当前上下文:getContext()—>获取当前所有的可用的上下文。该方法不需要入参

      eg:driver.getContext()
    
  2. 当前所有上下文句柄:getContextHandles()—>获取当前所有可用的上下文。该方法不需要入参

  3. 切换上下文:context()—>切换到特定的上下文中。需要指定上下文的名称

      eg:driver.context('NATIVE\_APP') 
          driver.context('WEBVIEW\_1')
    

10、API 键盘操作:

  1. sendKeys()

      eg:driver.findElements(By.name("Name")).sendKeys("jack")
    
  2. pressKeyCode()—>发送一个键码的操作。需要一个入参,参数值查看Android keycode参考表。

      eg:driver.pressKeyCode(29)
          driver.pressKeyCode(AndroidKeyCode.HOME)
    

11、API TouchAction 操作:

辅助类,主要针对手势操作,比如滑动、长按、拖动等

  1. 按压控件:press(WebElementel, int x, int y)—>开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置

      eg:TouchAction(driver).press(x=0,y=308).release().perform()
    
  2. release() 结束的行动取消屏幕上的指针

  3. Perform() 执行的操作发送到服务器的命令操作

  4. 长按控件:longPress(WebElement el, int x, int y, Duration duration)—>开始按压一个元素或坐标点(x,y),duration为时间,单位是ms

      eg:TouchAction(driver).longPress(names.get(1),1000).perform().release()
          TouchAction(driver).longPress(1 ,302,1000).perform().release()
    
  5. 点击控件:tap(WebElement el, int x, int y)—>对一个元素或控件执行点击操作

      eg:TouchAction(driver).tap(names.get(1)).perform().release()
          TouchAction(driver).tap(1 ,302).perform().release()
    
  6. 移动:movTo(WebElement el, int x, int y)—>将指针(光标)从过去指向指定的元素或点

      eg:TouchAction(driver).moveTo(names.get(1)).perform().release()
          TouchAction(driver).moveTo(1 ,302).perform().release()
    
  7. 暂停:wait()—>暂停脚本的执行,单位为毫秒

      eg:TouchAction(driver).wait(1000)
    

12、API 其他操作:—>针对移动设备上特有的一些操作

  1. 熄屏:lockDevice()—>点击电源键熄灭屏幕

      eg:driver.lockDriice()
    
  2. 当前Activity:currentActivity()—>得到当前应用的activity。只适用于Android

      eg:driver.currentActivity()
    
  3. 收起键盘:hideKeyboard()

      eg:driver.hideKeyboard()
    
  4. 滑动:swipe(startx, starty, endx, endy, duration)—>模拟用户滑动。将控件或元素从一个位置(x,y)拖动到另一个位置(x,y)

      eg:driver.swipe(75, 500, 75, 0, 800)
    
  5. 拉出文件:pullFile()—>从设备中拉出文件

       eg:driver.pullFile('Library/AddressBook/AddressBook.sqlitedb')
    
  6. 推送文件:pushFile()—>推送文件到设备中去

       eg:data = Base64.encodeBase64("some data for the file".getBytes())
           driver.pushFile("sdcard/test.txt", data)
    

13、adb命令收集:

aapt dump badging D:\XXX.apk: 获取安装包的所有信息

adb devices:(查看手机是否连接到电脑)

adb shell pm list packages:列出所有的包名,找到所查看包的包名。

adb shell dumpsys package com.android.XXX:查看某个包的具体信息

其它:

adb devices:查看Android设备是否连接到电脑。

adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

adb shell dumpsys activity activities

adb shell pm list packages:列出所有的包名。

adb shell dumpsys package:列出所有的安装应用的信息

adb shell dumpsys package com.android.XXX:查看某个包的具体信息

adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

adb logcat | grep ActivityManager:查看当前正在运行的Activity

adb logcat | grep Displayed:查看当前正在运行的Activity

adb logcat | grep Displayed:查看当前正在运行的Activity

你可能感兴趣的:(测试开发,python,功能测试,selenium)