1.根据resource-id定位
driver.find_element_by_id('com.alpha.lagouapk:id/result_Search')
2.根据content-desc 也就是accessibility id获取元素
driver.find_element_by_accessibility_id('面板').click()
3.根据xpath
driver.find_element_by_xpath('//*[@属性名=属性值"]')
4.根据坐标模拟点击:
场景:无法定位到目标元素,采取的一种补救方法
确定:不是针对于元素操作,必须等目标元素出现才有相应的交互效果。不同分辨率的屏幕或造成误差
#获取当前元素的宽度高度 size=driver.get_window_size()
#通过坐标模拟点击某一个属性。最多传5个坐标 driver.tap([(坐标1)])
示列:
#导包 import time from appium import webdriver #准备自动化配置信息 desired_caps={ #移动设备平台 'platformName':'Android', #平台OS版本号 'plathformVersion':'8', #设备的名称--值可以随便写 'deviceName':'test0106', #提供被测app的信息-包名,入口信息 #com.renaissance.bingzhe/.UnityPlayerActivity 'appPackage':'com.renaissance.bingzhe', 'appActivity':'.UnityPlayerActivity', #确保自动化之后不重置app 'noReset':True, #设置session的超时时间,单位秒 'newCommandTimeout':6000, #指定自动化驱动 'automationName':'UiAutomator2', } driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) driver.implicitly_wait(10) #只有目标元素没有出现的时候才会触发 time.sleep(20) print('开始点击') #模拟坐标点击按钮 #driver.tap([(750,60)]) #只有当目标控件出现的时候点击才有效果 #如果屏幕的分辨率不同但是比例一致,可以用相对屏幕尺寸的方法来获取坐标 size=driver.get_window_size() #'width', 'height' width=size['width'] height=size['height'] #宽度的11/16 pos_x=width/16*11 #高度的1/32 pos_y=height/32 print(pos_x,pos_y) driver.tap([(pos_x,pos_y)]) time.sleep(10) driver.quit()
5.长按: 最后一个参数代表点击几秒。不传默认点击。如果传了代表长按单位为毫秒
driver=webdriver.Remote('http://localhost:4723/wd/hub',desktop_caps) #等待5秒种 time.sleep(5) #长按3秒 driver.tap([(500,800)],3000)
6.模拟打开通知栏
driver.open_notifications()
7.关闭通知栏--模拟发送返回键
driver.keyevent(4)
具体keyevent()里面需要传操作对应的编号:
编码表:https://www.cnblogs.com/zhuminghui/p/10470865.html
代码列子:
#打开通知栏 import time from appium_basicCode.teacher_code.day3.conf import boss_caps from appium import webdriver #初始化driver对象-用于控制手机 driver=webdriver.Remote('http://localhost:4723/wd/hub',boss_caps) #隐士等待的触发条件是?--获取元素,且当前页面没有该元素才会触发 driver.implicitly_wait(10)#稳定元素 #模拟打开通知栏 driver.open_notifications() time.sleep(5) #关闭通知栏--模拟发送返回键 driver.keyevent(4) # driver.press_keycode(4) 效果同上 input('打开通知栏') driver.quit()
8.左滑右滑:
5个参数:开始滑动的横坐标。纵坐标。滑动到的位置横坐标、纵坐标。多长时间滑动一次。
driver.swipe(start_x, start_y, end_x, end_y, 2000)
代码列子:
import time from appium_basicCode.teacher_code.day3.conf import boss_caps from appium import webdriver driver = webdriver.Remote('http://localhost:4723/wd/hub',boss_caps) driver.implicitly_wait(10) time.sleep(10)#等待主页面出现 #滑动练习 #获取当前元素的宽度高度 size=driver.get_window_size() start_x=size['width']/2 start_y=size['height']/4*3 end_x=start_x #上下滑动x不变 block=driver.find_elements_by_xpath('//*[@resource-id="com.hpbr.bosszhipin:id/lv_list"]/*[1]')[1] distance=block.size['height']+5 #块的高度作为滑动距离 end_y=start_y-distance #起点减去滑动距离等于终点 #driver.swipe(start_x,start_y,end_x,end_y,1000) #针对屏幕操作 #滑动应用场景---边滑动边找元素 #先看界面有没有目标,如果没有就滑动,有就停下来 def search_job(target): while 1: #循环退出的条件是找到目标元素 job=driver.find_element_by_id('com.hpbr.bosszhipin:id/tv_position_name') if target in job.text: print('找到目标工作') break driver.swipe(start_x, start_y, end_x, end_y, 2000) search_job('测试开发') driver.quit()