05. Appium手机操作
2024年10月28日大约 4 分钟
05. Appium手机操作
- 常用手机操作Api:获取分辨率、手机截图、获取和设置网络、发送键到设备、打开和关闭通知栏
1. 获取分辨率和截图
淘宝商品通过坐标点翻页,如换了分辨率还是原坐标点吗?
- 通过获取手机分辨率来动态计算滑动的起始坐标点
获取手机分辨率
- 实现方法:driver.get_window_size()
有些自动化的操作可能没有反应,但并不报错,此时我们就可以将操作过后的关键情况,截图保存。后期也可以根据图片发现问题
获取手机截图
- 实现方法:get_screenshot_as_file(filename)
2. 获取和设置手机网络
下面场景是否遇到过,那么基于APP是否需要进行测试?
手机和网络对照图
实现方法
- 获取手机网络
- driver.network_connection()
- 设置手机网络
- driver.set_network_connect(connectionType)
- connectionType:表示网络设置类型
- 设置网络类型<真机有权限问题,知道就行>
- 获取手机网络
演练
需求: 1、查看当前网络类型 2、设置网络类型为飞行模式 3、获取当前屏幕分辨率 4、截图保存
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.connectiontype import ConnectionType desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:52001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置支持中文输入, 不设置输入中文没反应 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) driver.implicitly_wait(10) """ 需求: 1、查看当前网络类型 2、设置网络类型为飞行模式<真机有权限问题>https://blog.csdn.net/YUICUI/article/details/123778853?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123778853-blog-121244714.235%5Ev31%5Epc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123778853-blog-121244714.235%5Ev31%5Epc_relevant_default_base3&utm_relevant_index=4 3、获取当前屏幕分辨率 4、截图保存 """ # 1、查看当前网络类型 print("当前网络类型为:", driver.network_connection) # 2、设置网络类型为飞行模式 driver.set_network_connection(connection_type=ConnectionType.AIRPLANE_MODE) print("设置之后的网络类型为:", driver.network_connection) sleep(10) # 设置网络 driver.set_network_connection(ConnectionType.ALL_NETWORK_ON) # 3、获取当前屏幕分辨率 print("当前屏幕分辨率为:", driver.get_window_size()) # 4、截图保存 driver.get_screenshot_as_file("./screen.png") sleep(3) driver.quit()
3. 发送键到设备
需求:‘王者荣耀’APP在按HOME键时置于后台?按两次返回键弹出确认退出提示窗口
实现方法
- 发送按键到设备
- driver.press_keycode(keycode)
- keycode:表示手机设备的默认键码
- http://developer.android.com/reference/android/view/KeyEvent.html
- 参考键码表
- driver.press_keycode(keycode)
- 发送按键到设备
演练
需求: 1、点击三次音量+ 24 2、点击返回 < 4 3、点击两次音量- 25
from time import sleep from appium import webdriver # 定义字典变量 desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:52001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置中文 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) driver.implicitly_wait(10) i = 0 # 三次增大音量 while i < 3: driver.press_keycode(24) i += 1 sleep(2) # 点击返回 driver.press_keycode(4) i = 0 # 两次减小音量 while i < 2: driver.press_keycode(25) i += 1 sleep(3) driver.quit()
4. 操作通知栏
'网易新闻'APP有新闻推送,需要进行测试需要先打开通知栏
实现方法
- 打开通知栏: driver.open_notifications()
注意
- appium官方并没有为我们提供关闭通知的api,那么现实生活中怎么关闭,就怎样操作就行,比如,手指从下往上滑动或者按返回键
演练
需求: 1、打开通知栏,点击通知栏的信息
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:62001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置支持中文输入, 不设置输入中文没反应 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) driver.implicitly_wait(10) """ 需求: 1、打开通知栏,点击通知栏的信息 """ # 打开通知栏 driver.open_notifications() sleep(2) # # 查找信息并点击 driver.find_element(AppiumBy.XPATH, "//*[@text='企服管理']").click() # appium官方并没有为我们提供关闭通知的api,那么现实生活中怎么关闭,就怎样操作就行,比如,手指从下往上滑动或者按返回键 # TouchAction(driver) \ # .press(x=200, y=20).wait(500) \ # .move_to(x=200, y=300).wait(500) \ # .release().perform() # driver.find_element(AppiumBy.XPATH, "//*[@text='企服管理']").click() sleep(3) driver.quit()