UIAutomator定位简介
UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiautomator的类库去查找元素。 Appium元素定位方法其实也是基于Uiautomator来进行封装的。
使用方法 find_element_by_android_uiautomator() 可以运用UiAutomator元素定位。
定位方法
id定位
text定位
class name定位
id定位
id定位是根据元素的resource-id属性来进行定位,使用 UiSelector().resourceId()方法即可。
jiaoyibao_by_Uiautomator_id.py
from jiaoyibao.jiaoyibao_capability1 import driver
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/et_account")').send_keys('suwen20')#用户名
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/et_password")').send_keys('123456keke')#得到密码
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/bt_login")').click()#登录
text定位
text定位就是根据元素的text属性值来进行定位,new UiSelector()
driver.find_element_by_android_uiautomator\
('new UiSelector().text("请输入用户名或者手机号码登录")').send_keys('suwen20')
jiaoyibao_by_Uiautomator_text.py
from jiaoyibao.jiaoyibao_capability1 import driver
driver.find_element_by_android_uiautomator\
('new UiSelector().text("请输入用户名或手机号码登录")').send_keys('suwen20')
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/et_password")').send_keys('123456keke')#得到密码
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/bt_login")').click()#登录
class name定位
与Appium class定位方式一样,也是根据元素的class属性来进行定位。
driver.find_element_by_android_uiautomator\
('new UiSelector().className("android.widget.EditText")').send_keys('suwen20')
jiaoyibao_by_Uiautomator_classname.py
from jiaoyibao.jiaoyibao_capability1 import driver
driver.find_element_by_android_uiautomator\
('new UiSelector().className("android.widget.EditText")').send_keys('suwen20')
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/et_password")').send_keys('123456keke')#得到密码
driver.find_element_by_android_uiautomator\
('new UiSelector().resourceId("com.konsonsmx.iqdii:id/bt_login")').click()#登录
jiaoyibao_capability1
from appium import webdriver #导入appium包
from selenium.common.exceptions import NoSuchElementException
desired_caps={} #定义一个字典,用来存储capablity的相关信息
desired_caps['platformName']='Android' #设备平台的名称
desired_caps['deviceName']='127.0.0.1:62025' #设备名称
desired_caps['platforVersion']='5.1.1' #设备的版本号
desired_caps['app']=r'C:\Users\bella\Desktop\20180922\jiaoyibao.apk' #获取包路径
desired_caps['appPackage']='com.konsonsmx.iqdii' #获取包名
desired_caps['appActivity']='com.konsonsmx.market.module.base.ui.FlashADActivity' #获取activity启动
desired_caps['noReset']='true' #模拟用户非首次启动
desired_caps['unicodeKeyboard']="true" #登录用了中文,代码要做配置
desired_caps['resetKeyboard']="true" #重置键盘也要设置为true
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) #启动服务
driver.implicitly_wait(2) #启动后等待2秒
def check_skipBtn():
print("check_skipBtn:检查是否有跳过这个按钮")
try:
skipBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/tvCountDown')
except NoSuchElementException:
print('no skipBtn:没有跳过这个按钮') #当没有这个元素就打印出no cancelBtn
else:
skipBtn.click() #存在这个元素就去点击
def check_loginBtn():
print("check_loginBtn:检查是否有个人头像这个按钮")
try:
loginBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/ib_title_left')
except NoSuchElementException:
print('no loginBtn:没有个人头像这个按钮') #当没有这个元素就打印出no cancelBtn
else:
loginBtn.click() #存在这个元素就去点击
def check_updateBtn():
print('check_updatBtn:检查是否有新包的更新')
try:
updateBtn=driver.find_element_by_id('com.konsonsmx.iqdii:id/ll_updatesure')
except NoSuchElementException:
print('no updatBtn:没有新包的更新这个按钮')
else:
updateBtn.click()
def check_passwordBtn():
print('check_passwordBtn:检查是否有密码登录这个按钮')
try:
passwordBtn=driver.find_element_by_id('com.konsonsmx.iqdii:id/tvMMDL')
except NoSuchElementException:
print('no passwowrdBtn:没有密码登录这个按钮')
else:
passwordBtn.click()
check_skipBtn()
check_loginBtn()
check_updateBtn()
check_passwordBtn()