[python]代码库
# coding=UTF-8
'''
@模块:添加模块
@用例:用ID添加设备到列表,进入预览后删除设备
@注意事项:运行此脚本会“清空设备列表的所有设备”,所添加设备必须在线
'''
#引用库↓
from allure_commons.model2 import Attachment
from appium import webdriver
from time import sleep
import traceback
import time
import random
import pytest
import allure
#获取设备、APP信息↓ 在cmd窗口查询app包名和activity命令:adb shell dumpsys activity activities
desired_caps = {}
desired_caps['platformName'] = 'Android' #手机系统
desired_caps['platformVersion'] = '' #系统版本
#desired_caps['deviceName'] = 'emulator-5554' #设备型号,连接手机后通过cmd窗口:adb devices
desired_caps['deviceName'] = '8BNDU17B11001942' #荣耀9
# desired_caps['deviceName'] = 'YDCIDQXOUGSOJZGY' #IQOO Z1
desired_caps['appPackage'] = 'com.juanvision.EseeNetProj' #APP包名
desired_caps['appActivity'] = 'com.juanvision.modulelogin.activity.SplashActivity' #APP活动类
desired_caps['noReset'] = 'true' #不重置APP
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #连接appium端口
driver.implicitly_wait(15) #隐式等待
#设置报错时截图储存路径 ↓
now = int(time.time()) #时间戳,用于避免文件重命名
now = str(now) #设置时间戳为字节格式才能使用
A = './result/' #设置截图保存路径
B = A + now + "添加异常.png"
device = '925294758' #配置设备ID
# 获取机器屏幕大小x,y用于滑动屏幕
def getSize():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return (x, y)
# 设置向上滑动
def swipedown(t):
l = getSize()
x1 = int(l[0] * 0.5) # x坐标
y1 = int(l[1] * 0.5) # 起始y坐标
y2 = int(l[1] * 0.35) # 终点y坐标
driver.swipe(x1, y1, x1, y2, t)
# 设置向下滑动
def swipeup(t):
l = getSize()
x1 = int(l[0] * 0.5) # x坐标
y1 = int(l[1] * 0.35) # 起始y坐标
y2 = int(l[1] * 0.5) # 终点y坐标
driver.swipe(x1, y1, x1, y2, t)
# 设置向右滑动
def swiperight(t):
l = getSize()
x1 = int(l[0] * 0.5) # x坐标
y1 = int(l[1] * 0.86) # 起始y坐标
x2 = int(l[0] * 0.7) # 终点x坐标
driver.swipe(x1, y1, x2, y1, t)
def login(): # 检查是否登录账号,登录则pass,未登录则登录。请勿使用yuncun1账号,此脚本会清空设备列表
try:
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_name_edt').is_displayed() # 检查是否位于登录界面
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_name_edt').clear()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_name_edt').send_keys('332@yopmail.com')
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_pwd_edt').send_keys('123456')
driver.find_element_by_id('com.juanvision.EseeNetProj:id/confirm_btn').click()
except:
pass
def reset(): # 检查是否在设备列表界面,否则重启APP
try:
sleep(1)
driver.find_element_by_id('com.juanvision.EseeNetProj:id/device_ll').is_displayed()
pass
except:
driver.close_app() # 关闭APP
sleep(1)
driver.launch_app() # 重启APP
def findpass(): # 检查设备列表是否有设备,有则清空设备列表
try:
driver.find_element_by_xpath('//*[contains(@text,"更多")]').is_displayed()
driver.find_element_by_xpath('//*[contains(@text,"更多")]').click()
driver.find_element_by_xpath('//*[contains(@text,"删除")]').click()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/dialog_confirm_btn').click()
sleep(3)
findpass()
except:
pass
def findpass2(): #检查设备是否在线,否则刷新列表
try:
driver.find_element_by_id('com.juanvision.EseeNetProj:id/dialog_confirm_btn').is_displayed()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/dialog_confirm_btn').click()
swipeup(1000)
sleep(3)
driver.find_element_by_xpath('//*[contains(@text,device)]').click()
findpass2()
except:
pass
def findpass3(): #检查设备是否存在当前页面,否则下滑页面查找
try:
sleep(3)
driver.find_element_by_xpath('//*[contains(@text,device)]').is_displayed()
driver.find_element_by_xpath('//*[contains(@text,device)]').click()
findpass2()
except:
swipedown(1000)
findpass3()
def findpass4(): #检查是否出现引导提示,是则关闭
try:
driver.find_element_by_id('com.juanvision.EseeNetProj:id/common_title_right_iv').is_displayed()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/common_title_right_iv').click()
except:
pass
def findpass5(): #检查是否为专用测试账号,否则重新登录
driver.find_element_by_id('com.juanvision.EseeNetProj:id/main_person_center_ll').click()
try:
driver.find_element_by_xpath('//*[contains(@text,"332@yopmail.com")]').is_displayed()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/device_ll').click()
pass
except:
driver.find_element_by_xpath('//*[contains(@text,"设置")]').click()
driver.find_element_by_xpath('//*[contains(@text,"退出登录")]').click()
driver.find_element_by_xpath('//*[contains(@text,"退出登录")]').click()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_name_edt').clear()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_name_edt').send_keys('332@yopmail.com')
driver.find_element_by_id('com.juanvision.EseeNetProj:id/user_pwd_edt').send_keys('123456')
driver.find_element_by_id('com.juanvision.EseeNetProj:id/confirm_btn').click()
sleep(3)
class Test_adding:
@allure.feature('用例:用ID添加设备到列表,进入预览后删除设备')
#@pytest.mark.repeat(100)
def test_adding(self):
try:
login()
reset()
findpass5()
findpass()
driver.find_element_by_id('com.juanvision.EseeNetProj:id/common_title_right_iv').click()
findpass4()
driver.find_element_by_xpath('//*[contains(@text,"其它添加方式")]').click()
driver.find_element_by_xpath('//*[contains(@text,"通过ID/IP添加")]').click()
driver.find_elements_by_id('com.juanvision.EseeNetProj:id/content_edt')[0].send_keys(device)
driver.find_element_by_xpath('//*[contains(@text,"完成")]').click()
sleep(5)
findpass3()
sleep(5)
sleep(3)
driver.press_keycode(4)
sleep(1)
driver.find_element_by_id('com.juanvision.EseeNetProj:id/device_ll').click()
except:
with allure.step('失败截图'):
traceback.print_exc() # 打印进程异常详情
driver.get_screenshot_as_file(B) # 截图保存到指定位置
allure.attach.file(B, attachment_type=allure.attachment_type.PNG) #引用截图到Allure报告
assert False
#unittest单独调试使用,运行pytest框架必须注释以下内容 ↓
# def runs():
# i = 0
# while i < 5:
# Test_adding.test_adding(self=0)
# i += 1
# print("------第"+str(i)+"次运行OK------")
# try:
# print ("start------开始测试")
# sleep(3)
# runs()
# sleep(3)
# print ("pass------测试通过")
# driver.quit() # 退出
# except:
# traceback.print_exc() # 打印进程异常详情
# print("fail------添加异常------")
# driver.get_screenshot_as_file(B) # 报错时截图保存