前面我们说了如何启动app,现在讲一下基本的操作,前提基础是我们启动app,并获取一个driver对象
from appium import webdriver
desired_capabilities = {
"platformName": "Android",
"appium:platformVersion": "12",
"appium:devicesName": "AXMN6R2729001833",
"appium:appPackage": "com.wepie.snake",
"appium:appActivity": "com.wepie.snake.app.activity.StartActivity"
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities)
1、获取屏幕宽高
# 获取屏幕宽度
el_x = driver.get_window_size()['width']
# 获取屏幕长度
el_y = driver.get_window_size()['height']
2、app相关操作
# 关闭app,相当于是退后台
driver.close_app()
# 启动当前app,相当于将退后台的app再次打开
driver.launch_app()
# 将app置于后台5s后再次恢复
driver.background_app(5)
# 卸载重装
driver.reset()
#安装应用 参数为apk包路径
driver.install_app('path/my.apk')
#删除应用 参数为包名
driver.remove_app('xxxxxx')
3、等待方式
强制等待:
import time
# 强制等待
time.sleep(5)
隐性等待:
# 隐性等待,页面加载完成则执行下一步,没有加载完成,则继续等待直到20秒后再执行下一步
driver.implictly_wait(20)
显性等待:
# 用法例1:
# 引入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
# 引入expected_conditions类,并重命名为EC
from selenium.webdriver.support expected_conditions as EC
# 引入By类
from selenium.webdriver.common.by import By
# 设置等待
wait = WebDriverWait(driver,10,0.5)
wait.until(EC.presence_of_element_located((By.ID,'KW')))
# 用法例2:
loc = ("xpath", "//*[@text='允许']")
e = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(loc))
e.click()
4、键盘操作
driver.hide_keyboard() # 隐藏键盘,要在键盘出来后使用,否则会报错
driver.deactivate_ime_engine() # 关闭设备当前的输入法
1)点击元素:
driver.find_element(By.XPATH, "xxxxxx").click()
2)点击并输入:
driver.find_element(By.XPATH, "xxxxxx").send_keys("123")
3)获取元素的文本:
text = driver.find_element(By.XPATH, "xxxxxx").text
4)键盘操作:
# 键盘操作,返回
driver.press_keycode(4)
# 键盘操作,回车
driver.press_keycode(66)
5)滑动swipe:
swpie()方法包含5个参数:起始点坐标(x1,y1)、终点坐标(x2,y2)、移动时长(ms)
只需要考虑坐标的位置,而不太注重屏幕的分辨率。
如何获取手机屏幕的长宽:get_window_size()
如何实现屏幕的滑动:通过长宽上的不同比例的倍数实现滑动的定位,这个注意一下滑动开始和结束的位置
左滑:
driver.swipe(int(w*0.25),int(h*0.5),int(w*0.75),int(h*0.5),1000)
上滑:
driver.swipe(int(w*0.5),int(h*0.75),int(w*0.5),int(h*0.25) ,1000)
举例:
el_x = driver.get_window_size()['width']
el_y = driver.get_window_size()['height']
driver.swipe(int(852/720*el_x), int(1661/1280*el_y), int(852/720*el_x), int(866/1280*el_y), duration=5000)
(注意:这里的坐标只能是int类型,duration单位是ms)
6)点击tap:
driver.tap([(398,1864),(703,1852),],3000) # 实现在这两个坐标,同时点击3秒钟
最多支持5个坐标的同时点击。(注意:点击时间为ms,可不填,最少填一个坐标,最多五个。若不填点击时间,这里默认值为0.1s)
7)缩小和放大:
缩小:pinch()
放大:zoom()
pinch(self, element=None, percent=200, steps=50)
zoom(self, element=None, percent=200, steps=50)
percent:缩放比例,percent=200就是2倍的比率,steps是步长
举例:我要对以下图片放大两倍
# 定位元素
element = driver.find_element(By.XPATH, "xxxxxx")
sleep(3)
# 放大两倍
driver.zoom(element,200,50)
8)拖拽操作:drag_and_drop
原理:需要两个元素id:
id1:需要拖拽的元素位置id
id2:需要拖拽到达的最终位置id
实例:QQ的未读消息的拖拽取消
代码如下:
# 定位元素
element1=driver.find_element(By.XPATH, "xxx")
element2=driver.find_element(By.XPATH, "xxx")
# 拖拽操作
driver.drag_and_drop(element1[0],element2[0])
还有很多其他操作,可以翻阅相关文档和api