导入driver对象
from appium import webdriver
导入手机启动参数
注:获取appPackage 和 appActivity可使用adb命令
adb shell dumpsys window w |findstr \/ |findstr name=
adb shell dumpsys window | findstr mCurrentFocus
caps = {}
caps["deviceName"] = "127.0.0.1:7555"
caps["platformName"] = "Android"
caps["appPackag"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
脚本内启动其它app
driver.start_activity(appPackage,appActivity)
关闭app
driver.close_app() # 关闭当前操作的app,不会关闭驱动对象
关闭驱动对象
driver.quit() # 关闭驱动对象,同时关闭所有关联的app
代码:
from appium import webdriver
import time
#server启动参数
caps = {}
#设备信息
caps["deviceName"] = "127.0.0.1:7555"
caps["platformName"] = "Android"
#app信息
caps["appPackag"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
driver.implicitly_wait(30)
time.sleep(5)
driver.quit()
1.APP元素定位操作
1.1Appium常用元素定位方式
1.1.1前置代码
from appium import webdriver
import time
#server启动参数
caps = {}
#设备信息
caps["deviceName"] = "127.0.0.1:7555"
caps["platformName"] = "Android"
#app信息
caps["appPackag"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
1.1.2通过id定位
方法:find_element_by_id(id_value) # id_value:为元素的id属性值
业务场景:
1.进入设置页面
2.通过ID定位方式点击搜索按钮
代码:
#点击设置
driver.find_element_by_id("com.android.settings:id/search").click()
1.1.3通过class定位
业务场景:
1.进入设置页面
2.点击搜索按钮
3.通过class定位方式点击输入框的返回按钮
代码
#点击设置
driver.find_element_by_id("com.android.settings:id/search").click()
#点击返回
driver.find_element_by_class_name('android.widget.ImageButton').click()
1.1.4通过xpath定位
*** android端xptah常用属性定位:
1. id ://*[contains(@resource-id,'com.android.settings:id/search')]
2. class ://*[contains(@class,'android.widget.ImageButton')]
3. text ://*[contains(@text,'WLA')]
*** 模糊定位 contains(@key,value): value可以是部分值
场景: 1进入设置页面
2.点击WLAN菜单栏
代码:
#点击wlan
driver.find_element_by_xpath('//*[contains(@text,"WLAN")]').click()
1.1.5通过class方式定位一组元素
场景:1进入设置页面
2.点击WLAN菜单栏(class定位对象列表中第三个)
代码:
#定位一组元素
aa=driver.find_element_by_class_name('android.widget.TextView')
#打印数据查看
print(type(aa))
#取出对应的值点击
aa.click()
1.1.6发送数据到输入框
场景: 1进入设置页面
2点击搜索框
3.输入1234
代码:
#点击搜索
driver.find_element_by_xpath(' //android.widget.TextView[@content-desc="搜索设置"]').click()
#输入内容1234
driver.find_element_by_id('android:id/search_src_text').send_keys(1234)
1.1.7清空输入框内容
方法:clear()
场景: 1进入设置页面
2点击搜索框
3.输入1234
4.删除已输入的1234
代码:
#点击搜索
driver.find_element_by_xpath(' //android.widget.TextView[@content-desc="搜索设置"]').click()
#输入内容1234
aa=driver.find_element_by_id('android:id/search_src_text')
aa.send_keys(1234)
time.sleep(2)
#删除1234
aa.clear()
1.1.8获取元素的文本内容
方法 text
业务场景:
1.进入设置
2.获取所有元素class为android.widget.TextView的文本内容
代码:
text=driver.find_elements_by_class_name('android.widget.TextView')
for i in text:
print(i.text)
1.1.8.获取元素在屏幕上的坐标
方法:location
业务场景:
1.进入设置页面
2.获取搜索按钮在屏幕的坐标位置
代码:
#定位到搜索按钮
aa=driver.find_element_by_id("com.android.settings:id/search")
#打印搜索按钮在屏幕坐标
print(aa.location)
结果:
1.1.9swipe滑动事件
⚠️从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动
方法:swipe(start_x, start_y, end_x, end_y, duration=None)
参数:
1.start_x:起点X轴坐标
2.start_y:起点Y轴坐标
3.end_x: 终点X轴坐标
4.end_y,: 终点Y轴坐标
5.duration: 滑动这个操作一共持续的时间长度,单位:ms
业务场景:
1.进入设置
2.从坐标80,1188 滑到80,249
代码:
#从坐标80,1188 滑到80,249
driver.swipe(80,1188,80,249,duration=1000)
1.1.10scroll滑动事件
业务场景:
1.进入设置
2.模拟手指将存储菜单滑动到WLAN菜单栏位置
代码:
#定位存储菜单栏
e11=driver.find_element_by_xpath("//*[contains(@text,'存储设备和 USB')]")
#定位到WLAN菜单栏
el2=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
#执行滑动操作
driver.scroll(e11,el2)
1.1.11drag拖拽事件
业务场景:
1.进入设置
2模拟手指将存储菜单滑动到WLAN菜单栏位置
代码:
#定位存储菜单栏
e11=driver.find_element_by_xpath("//*[contains(@text,'存储设备和 USB')]")
#定位到WLAN菜单栏
el2=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
#执行滑动操作
driver.drag_and_drop(e11,el2)
1.1.12手指轻敲操作
业务场景:
1.进入设置
2点击WLAN选项
#通过元素定位方式敲击屏幕
el=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
TouchAction(driver).tap(el).perform()
1.1.13手指按操作
业务场景:
1.进入设置
2点击WLAN选项
#通过元素定位方式敲击屏幕
el=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
TouchAction(driver).tap(el).release().perform()
#通过坐标方式按下屏幕x=155,y=250
TouchAction(driver).press(x=155,y=250).release().perform()
1.1.14手指移动操作
业务场景:
1.进入设置
2.点击安全
3.点击屏幕锁定方式
4.绘制图案
#往下滑动
driver.swipe(160,684,160,221,duration=1000)
#点击安全
driver.find_element_by_xpath('//*[contains(@text,"安全")]').click()
#点击屏幕
driver.find_element_by_xpath('//*[contains(@text,"屏幕锁定方式")]').click()
#绘制图案 1032,236 890,375 747,527 1029,527
TouchAction(driver).press(x=1032,y=236).wait(100).move_to(x=890,y=375).wait(100).move_to(x=747,y=527).wait(100).move_to(x=1029,y=527).wait(100).release().perform()