id定位综合实践——自动登录
测试场景
1.启动App,进入到登录界面
2.在登录页面输入用户名“自学网2018”,密码‘zxw2018’ 然后点击登录。
需求分析
1.可以把启动后检测升级弹窗和引导页面的模块抽离作为独立的模块被其他模块调用,提高代码复用率。
2.获取用户名密码输入框和登录按钮的元素id属性,另外要考虑启动时App之前是否登录过账号,已经登录过和未登录场景流程不一样。
3.注意:send_keys()传入中文时需要在capability中配置如下内容:
desired_caps['unicodeKeyboard']="True"
desired_caps['resetKeyboard']="True"
代码实现:
capability.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['deviceName']='JDN-W09'
# desired_caps['platforVersion']='6.0.1'
# desired_caps['udid']='7YRBBDB7B0702188'
desired_caps['app']=r'C:\Users\bella\Desktop\20180922\kaoyan3.1.0.apk'
desired_caps['appPackage']='com.tal.kaoyan'
desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
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)
def check_cancelBtn():
print('check cancelBtn')
try:
cancelBtn=driver.find_element_by_id('android:id/button2').click() #查找这个元素
except NoSuchElementException:
print('no cancelBtn') #当没有这个元素就打印出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_cancelBtn()
check_skipBtn()
kyb_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') #再去传入对应的值Send Keys
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() #如果没有这个元素,直接进入到登录界面,调用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() #去调用login()
然后动运行kyb_login.py
注意:
使用Appium做了输入操作之后,如果出现输入法无法唤起,可以在系统设置——语言和输入法——将当前输入法替换为系统输入法或者其他输入法。