思考
- 如果安装的版本最新的包,或者升级到了最新的版本,则启动后没有升级弹窗元素该如何处理?
- 跳过引导页面首次启动和非首次启动场景该如何处理?
方案探索1——if条件判断
有同学可能想到用if来做条件判断,判断元素是否存在,存在则点击,不存在则跳过。
kyb_cancel_skip_if.py
from appium import webdriver
desired_caps={}
desired_caps['platformName']='Android'
desired_caps['deviceName']='127.0.0.1:62025'
desired_caps['platforVersion']='5.1.1'
desired_caps['app']=r'C:\Users\Shuqing\Desktop\kaoyan3.1.0.apk'
desired_caps['appPackage']='com.tal.kaoyan'
desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset']='True'
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(5)
cancelBtn=driver.find_element_by_id('android:id/button2')
skipBtn=driver.find_element_by_id('com.tal.kaoyan:id/tv_skip')
if cancelBtn:
cancelBtn.click()
else:
print('no cancelBtn')
if skipBtn:
skipBtn.click()
else:
print('no skipBtn')
方案探索2——异常捕捉
既然上面的if语句判断无法生效,但是我们发现一个突破口,那就是捕捉NoSuchElementException异常。
kyb_cancel_skip_try.py
from appium import webdriver
from selenium.common.exceptions import NoSuchElementException
desired_caps={}
desired_caps['platformName']='Android'
desired_caps['deviceName']='127.0.0.1:62025'
desired_caps['platforVersion']='5.1.1'
desired_caps['app']=r'C:\Users\Shuqing\Desktop\kaoyan3.1.0.apk'
desired_caps['appPackage']='com.tal.kaoyan'
desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset']='True'
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(5)
def check_cancelBtn():
print("check_cancelBtn")
try:
cancelBtn = driver.find_element_by_id('android:id/button2')
except NoSuchElementException:
print('no CancelBtn')
else:
cancelBtn.click()
def check_skipBtn():
print("check_skipBtn")
try:
skipBtn = driver.find_element_by_id('com.tal.kaoyan:id/tv_skip')
except NoSuchElementException:
print('no skipBtn')
else:
skipBtn.click()
check_updateBtn()
check_skipBtn()
id定位综合实践——自动登录
测试场景
- 启动App,进入到登录界面
- 在登录页面输入用户名“自学网2018”,密码‘zxw2018’ 然后点击登录。
需求分析
- 可以把启动后检测升级弹窗和引导页面的模块抽离作为独立的模块被其他模块调用,提高代码复用率。
- 获取用户名密码输入框和登录按钮的元素id属性,另外要考虑启动时App之前是否登录过账号,已经登录过和未登录场景流程不一样。
- 注意:send_keys()传入中文时需要在capability中配置如下内容:
desired_caps['unicodeKeyboard']="True"
desired_caps['resetKeyboard']="True"
设置之后会有Appium的输入法守护来执行输入操作
代码实现
kby_login.py
from find_element.capability import driver,NoSuchElementException
def login():
driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()
driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('自学网2018')
driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('zxw2018')
driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()
try:
driver.find_element_by_id('com.tal.kaoyan:id/mainactivity_button_mysefl')
except NoSuchElementException:
login()
else:
driver.find_element_by_id('com.tal.kaoyan:id/mainactivity_button_mysefl').click()
driver.find_element_by_id('com.tal.kaoyan:id/activity_usercenter_username').click()
login()
注意:
使用Appium做了输入操作之后,如果出现输入法无法唤起,可以在系统设置——语言和输入法——将当前输入法替换为系统输入法或者其他输入法。