appium+Python实例(二)模拟新建场景表(辅助测试执行)

背景:

测试目的:测试各个设备的场景表极限

需求:1.已知A设备上可存储的场景表是80个,B设备上可存储的场景表是40个

2.从网关删除场景记录后,会通知设备去删除它自己的场景记录

3.设备重新组网后,会清除自身存储的场景表,而网关数据库的场景记录仍存在

此篇目的是用脚本来实现创建80个场景表的过程,核心点仍需手动测试。

# coding:utf-8  #解决中文乱码问
# Import the common package
from appium import webdriver
from time import sleep
#初始化
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.4'
desired_caps['deviceName'] = 'f48e929e7371'
desired_caps['appPackage'] = 'com.smartlifev30'
desired_caps['appActivity'] = 'com.smartlifev30.activity.GuideActivity'
desired_caps['unicodeKeyboard'] = 'True'  #键盘支持中文输入要添加该代码
desired_caps["resetKeyboard"] = 'True' #隐藏手机自带的虚拟键盘,防止遮挡元素
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)


#集中定义局部变量
appnme = "com.smartlifev30"
username = "13……"
pwd = '1'
goalGeteway = "sn号:000c43132……b"
tianjia = '添加设备'

#检查app是否安装,Flag=True/False
Flag = driver.is_app_installed(appnme)
print("smartlife APP是否已经安装:",Flag)
# if not Flag:
#     driver.install_app("C:/Users/Lenovo/Desktop/android_v3.0.7……4.1.apk")
#     sleep(30)
# sleep(28)


#app检测到新版本时,会提示弹出“下载更新"的框,此次需要加判断(若有新版本暂时不更新,无新版时,无任何操作
# 无新版本时,定位不到弹出框界面的”否“按键,因此要try捕获异常,从而让程序继续往下执行,不会终止运行。
try:
    driver.find_element_by_id("android:id/button2").click()
except Exception as e:
    print("未检测到新版本,line=36:", e)
sleep(1)


#登录服务器模块---????????----可以抽象为一个方法   抽象为一个对象,分别适合与哪些情况
# 要考虑使用token方式进行登陆,故用try-except进行判断
try:
    driver.find_element_by_id("com.smartlifev30:id/phone_number").clear()
    driver.find_element_by_id("com.smartlifev30:id/phone_number").send_keys(username)
    sleep(3)
    driver.find_element_by_id("com.smartlifev30:id/password").clear()
    driver.find_element_by_id("com.smartlifev30:id/password").send_keys(pwd)
    sleep(2)
    driver.find_element_by_id("com.smartlifev30:id/btn_login").click()
    sleep(10)
except Exception as e:
    print("未显示登录界面,已用token登录,line=52:", e)


# 在网关列表,选择目标网关进行登录(考虑列表中有个网关的情况)
if driver.find_element_by_id("com.smartlifev30:id/theme").text == tianjia :
    print('恭喜你已经进入网关列表界面')
snLst = driver.find_elements_by_id("com.smartlifev30:id/hareware_sn")
for tempName in snLst:
    if tempName.text == goalGeteway :
        tempName.click()
        break
sleep(23)

# 我的--设置--情景设置--添加软场景(可调光控制器支持20个场景表)
driver.find_element_by_id("com.smartlifev30:id/home_mine").click()
sleep(1)
shezhi=driver.find_element_by_id("com.smartlifev30:id/mineopt_item_txt").text
if shezhi == "设置":
    driver.find_element_by_id("com.smartlifev30:id/mineopt_item_txt").click()
sleep(1)
# 定位到情景设置按键,进入管理界面
setLen=driver.find_elements_by_id("com.smartlifev30:id/hc_item_txt")
if len(setLen) >3:
    if driver.find_elements_by_id("com.smartlifev30:id/hc_item_txt")[3].text == '情景设置':
        driver.find_elements_by_id("com.smartlifev30:id/hc_item_txt")[3].click()
#添加软场景--(添加指定名称的设备到场景中)
for i in range(1,6):
    # 点击+,添加软场景
    driver.find_element_by_id("com.smartlifev30:id/btn_add").click()
    #输入情景名称
    driver.find_element_by_id("com.smartlifev30:id/edit_scene_name").send_keys("secens"+str(i))
    #进入房间管理界面
    driver.find_element_by_id("com.smartlifev30:id/edit_room_select").click()
    #选择第一个房间
    driver.find_element_by_id("com.smartlifev30:id/ll_room_item").click()
    #添加设备(需在第一个房间中)
    driver.find_element_by_id("com.smartlifev30:id/add_dev").click()
    # 在设备列表界面,选中要添加的设备
    devLst = driver.find_elements_by_id("com.smartlifev30:id/contact_name")
    for oneDev in devLst:
        if oneDev.text == '可调光':
            oneDev.click()
            break
    # 选择好了设备,点击保存按键
    driver.find_element_by_id("com.smartlifev30:id/btn_confirm").click()
    #在情景记录编辑界面--设置可调光的开关情况
    driver.find_element_by_id("com.smartlifev30:id/txt_instruct").click()
    #设置可调光均为关
    driver.find_element_by_id("com.smartlifev30:id/iv_title_right").click()
    #在情景记录的编辑界面,点击保存按键
    driver.find_element_by_id("com.smartlifev30:id/btn_confirm").click()
    sleep(1)
sleep(10)
#删除所有情景记录--可能会出现的问题,比如删除前查询到总记录=5,删除3条后,删第4条时,若按index=3删除,则会定位失败,因为当前界面只有2个记录了。所以每次总删第一条,循环5次即可。
deLst = driver.find_elements_by_id("com.smartlifev30:id/btn_item_del")
for delSecen in deLst:
    driver.find_element_by_id("com.smartlifev30:id/btn_item_del").click()
    driver.find_element_by_id("android:id/button1").click()

#依赖当前所处菜单级数,决定后退几次才能返回主界面,才能在主界面定位“我的”-->退出登录
driver.find_element_by_id("com.smartlifev30:id/home_mine").click()
sleep(10)
driver.find_element_by_id("com.smartlifev30:id/login_out").click()
#结束测试
driver.quit()

 

 

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

脚本基本上属于边调试边执行用例,不够智能,代码结构还有很多地方需要优化,只能说是辅助测试的一种手段,加油,离测试开发的距离还远呐。

posted @ 2017-11-17 17:27  幸福在今天  阅读(204)  评论(0)    收藏  举报