0
点赞
收藏
分享

微信扫一扫

appium框架

曾宝月 2022-04-02 阅读 53

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,点击搜索按钮对机型、包名等进行配置;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cotimPcT-1648911097302)(images/Qc8lYppkDrteuH97gnO69ubuuYQG6M6VGeQMyF-GeIs.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XnR6uCWy-1648911097305)(images/BC7XznbmLP6x5Hda4QuO2Otjp7J9-dEDc276eMFRqus.png)]

  3. 点击start session按钮连接到Android界面进行定位。
  1. python 版 uiAutomator2 中的 weditor:【注意:实测与其他两个相互冲突】

    1. 安装:pip install --pre weditor
    2. 使用:python -m weditor
      注意:使用运行weditor时会在连接设备中自动安装一个ATX的app,这个App与uiAutomator2冲突,在运行代码时会产生报错。解决方法时运行代码前删除ATX app。ATX只在元素定位时有用。
  2. Chrome Inspect:Chrome提供的一个移动端Web开发调试工具。【没用过,有空研究研究】

  3. uiautomatorviewer.bat,在 Android SDK 的 /tools/bin/ 目录下。 运行uiautomatorviewer.bat,安卓模拟器打开APP,点击uiautomatorviewer中左上第二个按钮,模拟器屏幕截图会出现在uiautomatorviewer左下角,单击截图上的元素,右下角会出现元素的各种属性值。缺点:每个界面都要截图才能进行元素定位。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZs4WahZ-1648911097307)(images/1zEYKOjLjWrGPh38XbwNRFFSRve37M0VaO5ZJi6nq0k.png)]

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”))

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”)) //7
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)

拉出文件:pullFile()—>从设备中拉出文件

	eg:driver.pullFile('Library/AddressBook/AddressBook.sqlitedb')
  1. 推送文件: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

举报

相关推荐

0 条评论