web UI自动化用例练习

1. 导入类

from selenium import webdriver
from Uiframe0test.public.login import Mylogin
from Uiframe0test.public.log_create import createlog  #导入进入新建日志的类
from selenium.webdriver.common.action_chains import ActionChains  #导入鼠标事件的类
from selenium.webdriver.common.keys import Keys  #导入键盘事件的类
import time
import unittest
import os

2. SetUp方法

class TestShouye(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()   #初始化driver
        self.driver.get('http://171.2.3.121:8088/')  #进入项目地址
        self.driver.maximize_window()  #窗口最大化
        time.sleep(3)
        #打印开始时间
        print("starttime:"+time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())))

3. tearDown方法

def tearDown(self):
    filedir = 'D:/test/screenshot/'
    TIME = time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))  #打印结束时间
    if not os.path.exists(filedir):
        os.makedirs(os.path.join('D:/','test','screenshot'))
    print('endTime:'+TIME)
    screen_name = filedir+TIME +'.png'
    self.driver.get_screenshot_as_file(screen_name)  #截图
    self.driver.quit()  #退出浏览器

4.用例1- 验证title和url

def testShouYe_wukong01(self):
    '''验证title和url'''
    Mylogin(self.driver).login()  #登录
    title = self.driver.title  #获取title
    url = self.driver.current_url  #获取当前页面url
    #断言结果
    self.assertEqual('悟空CRM',title)
    self.assertIn('http://171.2.3.191:8088',url)

5.用例2- 浏览器前进、后退、刷新

def testShouYe_wukong02(self):
    '''测试浏览器前进、后退、刷新'''
    Mylogin(self.driver).login()
    self.driver.find_element_by_xpath("//div[@class='nav-items-container']/div/a[2]/div").click()  # 点击客户管理
    time.sleep(3)
    self.driver.back()  # 后退
    TongXunLu = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[7]/li/span").is_displayed()
    self.assertTrue(TongXunLu)  # 判断通讯录是否存在,若存在,则处于办公页面
    time.sleep(3)
    self.driver.forward()  # 前进
    YiBiaoPan = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[1]/li/span").is_displayed()
    self.assertTrue(YiBiaoPan)  # 判断仪表盘是否存在,若存在,则处于客户管理页面
    time.sleep(3)
    self.driver.refresh()  # 刷新
    self.assertTrue(YiBiaoPan)  # 判断仪表盘是否存在,若存在,则处于客户管理页面

6.用例3- 测试首页导航文案显示是否正常

def test_wukong03(self):
    '''测试首页导航文案显示是否正常'''
    Mylogin(self.driver).login()
    BanGong = self.driver.find_element_by_xpath("//div[@class='nav-items-container']/div/a[1]/div")  #办公
    KeHuGuanLi = self.driver.find_element_by_xpath("//div[@class='nav-items-container']/div/a[2]/div")  # 客户管理
    ShangYeZhiNeng = self.driver.find_element_by_xpath("//div[@class='nav-items-container']/div/a[3]/div")  # 商业智能
    XiangMuGuanLi = self.driver.find_element_by_xpath("//div[@class='nav-items-container']/div/a[4]/div")  # 项目管理
    #断言结果
    self.assertEqual("办公",BanGong.text)
    self.assertEqual("客户管理",KeHuGuanLi.text)
    self.assertEqual("商业智能",ShangYeZhiNeng.text)
    self.assertEqual("项目管理",XiangMuGuanLi.text)

7.用例4- 办公页面左侧元素检查

def test_wukong04(self):
    '''办公页面左侧元素检查'''
    Mylogin(self.driver).login()
    time.sleep(3)
    ele0 = self.driver.find_element_by_class_name('button-name')  # 快速创建
    ele1 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[1]/li")  #工作台
    ele2 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[2]/li")  # 日程
    ele3 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[3]/li")  # 任务
    ele4 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[4]/li")  # 公告
    ele5 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[5]/li")  # 日志
    ele6 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[6]/li")  # 审批
    ele7 = self.driver.find_element_by_xpath("//div[@class='container']/ul/a[7]/li")  # 通讯录
    #断言结果
    self.assertEqual('快速创建',ele0.text)
    self.assertEqual('工作台', ele1.text)
    self.assertEqual('日程', ele2.text)
    self.assertEqual('任务', ele3.text)
    self.assertEqual('公告', ele4.text)
    self.assertEqual('日志', ele5.text)
    self.assertEqual('审批', ele6.text)
    self.assertEqual('通讯录', ele7.text)

8.用例5- 快速创建日志入口

def testShouYe_wukong05(self):
        '''快速创建日志入口'''
        Mylogin(self.driver).login()
        time.sleep(3)
        ele = self.driver.find_element_by_class_name('button-name')   #快速创建
        ActionChains(self.driver).move_to_element(ele).perform()       #鼠标移动到快速创建按钮上
        time.sleep(3)
        self.driver.find_element_by_xpath("//div[@class='quick-add-content']/p[1]/span").click()  #点击日志
        #断言结果:如果跳转之后的页面有日报,则说明已进入写日志页面
        time.sleep(3)
        RiBao = self.driver.find_element_by_xpath("//div[@class='new-journal']/div[2]/div[1]/div[1]/div/div/div/div[2]")
        self.assertIn("日报", RiBao.text)

9.用例6- 创建日志入口

 def testShouYe_wukong06(self):
        '''创建日志入口'''
        Mylogin(self.driver).login()
        time.sleep(3)
        self.driver.find_element_by_xpath("//div[@class='container']/ul/a[5]/li").click()  #点击日志
        time.sleep(3)
        self.driver.find_element_by_xpath("//main[@class='el-main']/div/div/button/span").click()  #写日志
        time.sleep(3)
        RiBao = self.driver.find_element_by_xpath("//div[@class='new-journal']/div[2]/div[1]/div[1]/div/div/div/div[2]")
        self.assertIn("日报",RiBao.text)

10.用例7- 创建日志

def testShouYe_wukong07(self):
    '''创建日志'''
    Mylogin(self.driver).login()
    createlog(self.driver).log()
    self.driver.find_element_by_xpath("//div[@class='form']/div[1]/div/textarea").send_keys('今日完成')   #今日工作内容
    self.driver.find_element_by_xpath("//div[@class='form']/div[2]/div/textarea").send_keys('明日计划')  # 明日工作内容
    self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight*0.5)')
    time.sleep(3)
    self.driver.find_element_by_xpath("//div[@class='form']/div[3]/div/textarea").send_keys('遇到问题')  # 遇到的问题
    time.sleep(3)
    self.driver.find_element_by_xpath("//div[@class='btn-group']/button[1]/span").click()  # 提交
    #断言结果
    ele = self.driver.find_element_by_xpath("//main[@class='el-main']/div/div/button/span")
    self.assertEqual("写日志",ele.text)

11.用例8- 新建日报-添加发送人

def testShouYe_wukong08(self):
    '''新建日报-添加发送人'''
    Mylogin(self.driver).login()
    createlog(self.driver).log()
    self.driver.find_element_by_xpath("//div[@class='form']/div[1]/div/textarea").send_keys('今日完成1')  # 今日工作内容
    js = 'var q = document.documentElement.scrollTop = 10000'   #滚动到底部
    self.driver.execute_script(js)  #执行js
    time.sleep(3)
    self.driver.find_element_by_class_name("sent-img").click()  # 发送给谁(加号)
    time.sleep(3)
    self.driver.find_element_by_xpath(
        "//div[@id='pane-user']/div[2]/div[1]/label/span[1]/span").click()  # 选择一个人
    time.sleep(3)
    self.driver.find_element_by_xpath("//div[@class='popover-footer']/button[1]").click()  # 点击确定
    time.sleep(5)
    self.driver.find_element_by_xpath("//div[@class='btn-group']/button[1]/span").click()  # 提交
    #结果断言
    ele = self.driver.find_element_by_xpath("//main[@class='el-main']/div/div/button/span")
    self.assertEqual("写日志",ele.text)

12.用例9- 筛选日报-被筛选的日报存在

def testShouYe_wukong09(self):
    '''筛选日报-被筛选的日报存在'''
    Mylogin(self.driver).login()
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='container']/ul/a[5]/li").click()  #点击日志
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@id='pane-1']/div/div[1]/div[1]/div/div/span/span/i").click()  #选择发起人
    time.sleep(2)
    self.driver.find_element_by_xpath("//html/body/div[2]/div[1]/div[1]/ul/li[4]").click()   #点击第4个人
    time.sleep(2)
    ele = self.driver.find_element_by_xpath("//div[@class='el-tabs__content' ]/div[1]/div/div[1]/div[2]/div/input")  #选择日期按钮
    ele.clear()  #清空默认时间
    ele.send_keys("2020-12-19")  #输入新时间
    time.sleep(3)
    self.driver.find_element_by_xpath("//div[@class='el-tabs__content' ]/div[1]/div/div[1]/div[3]/div/div/span/span/i").click()  # 选择类型
    time.sleep(2)
    self.driver.find_element_by_xpath("//html/body/div[4]/div[1]/div[1]/ul/li[2]").click()  # 点击日报
    time.sleep(2)
    #断言:username1是发起人输入框中回显的值,username2是第一条搜索结果中的用户名
    username1 = self.driver.find_element_by_xpath("//div[@class='el-tabs__content']/div[1]/div/div[1]/div[1]/div/div/input").get_attribute('value')
    username2 = self.driver.find_element_by_xpath("//div[@class='el-tabs__content']/div[1]/div/div[2]/div[1]/div[1]/div[1]/div[2]/p[1]/span[1]")
    self.assertEqual(username1,username2.text)

13.用例10- 筛选日报-被筛选的日报不存在

def testShouYe_wukong10(self):
    '''筛选日报-被筛选的日报不存在'''
    Mylogin(self.driver).login()
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='container']/ul/a[5]/li").click()  #点击日志
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@id='pane-1']/div/div[1]/div[1]/div/div/span/span/i").click()  #选择发起人
    time.sleep(2)
    self.driver.find_element_by_xpath("//html/body/div[2]/div[1]/div[1]/ul/li[1]").click()   #点击第1个人
    time.sleep(3)
    text = self.driver.find_element_by_xpath("//div[@class='el-tabs el-tabs--top']/div[2]/div[1]/div/div[2]/p/button/span").text
    #断言结果
    self.assertEqual('没有更多了',text)

14.用例11- 编辑个人信息

def testShouYe_wukong11(self):
    '''编辑个人信息'''
    Mylogin(self.driver).login()
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='navbar']/span[2]/div[2]/i").click()  #点击右上角箭头
    time.sleep(2)
    self.driver.find_element_by_xpath("//html/body/div[2]/div/div[1]").click()   #点击个人中心
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='header-handle']/button[2]").click()  #点击编辑
    time.sleep(2)
    name = self.driver.find_element_by_xpath("//div[@class='el-dialog__body']/form/div[1]/div/div/input")  #姓名
    name.clear()     #清空
    name.send_keys("luoxiaohua")   #输入新名字
    time.sleep(2)
    email = self.driver.find_element_by_xpath("//div[@class='el-dialog__body']/form/div[2]/div/div/input")  #邮箱
    email.clear()
    email.send_keys("123456@qq.com")
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='el-dialog__body']/form/div[3]/div/div/div[1]/input").click()  #性别
    self.driver.find_element_by_xpath("//div[@class='el-scrollbar']/div[1]/ul/li[2]").click()   #选择女
    time.sleep(2)
    self.driver.find_element_by_xpath("//div[@class='person-container']/div[6]/div/div[3]/span/button[1]").click()  #保存
    time.sleep(5)
    #断言
    newname = self.driver.find_element_by_xpath("//div[@class='section']/div[2]/div[1]/div/div[2]").text    #获取修改后的名字
    self.assertEqual('luoxiaohua',newname)

15.用例12- 通讯录搜索

def testShouYe_wukong12(self):
    '''通讯录搜索'''
    Mylogin(self.driver).login()
    time.sleep(3)
    self.driver.find_element_by_xpath("//div[@class='container']/ul/a[7]/li").click()  #点击通讯录
    time.sleep(3)
    search = self.driver.find_element_by_xpath("//div[@id='pane-1']/div[1]/input")  #搜索框
    search.send_keys('hua')  #在搜索框中输入内容
    search.send_keys(Keys.ENTER)   #enter
    time.sleep(3)
    result = self.driver.find_element_by_xpath("//div[@class='staff']/div[2]/div[2]/div/div[1]").text  #搜索结果
    #断言结果
    self.assertIn("hua",result)

16.用例13- 开通授权文本信息验证

def testShouYe_wukong13(self):
    '''开通授权文本信息验证'''
    Mylogin(self.driver).login()
    time.sleep(3)
    ele = self.driver.find_element_by_xpath("//div[@class='navbar']/span[1]/button")   #开通授权
    ActionChains(self.driver).move_to_element(ele).perform()   #鼠标移动到开通授权处
    time.sleep(3)
    detail1 = self.driver.find_element_by_xpath("//div[@class='auth-content']/div[1]")   #您暂未开通授权
    detail2 = self.driver.find_element_by_xpath("//div[@class='detail']")  # 为了给您提供更好的服务支持,建议您购买官方授权
    detail3 = self.driver.find_element_by_xpath("//span[@class='phone']")  # 400-0812-558
    print(detail1.text)
    print(detail2.text)
    print(detail3.text)
    #断言结果
    self.assertEqual("您暂未开通授权",detail1.text)
    self.assertEqual("为了给您提供更好的服务支持\n建议您购买官方授权", detail2.text)
    self.assertEqual("400-0812-558", detail3.text)

17.testrunner.py

import unittest
import time
import os,sys
from Uiframe0test.report import HTMLTestRunner  #HTMLTestRunner是一个开源的生成一个HTML报告的类


# 获取当前py文件路径地址,并进行路径分割(分割成目录路径和文件名称)
dirname,filename=os.path.split(os.path.abspath(sys.argv[0]))  #分割TestRunner.py文件执行的绝对路径
#前一部分(路径)给dirname,后一部分(py文件名称)给filename
print(dirname,filename)
case_path = ".\\case\\web\\"  #定义case_path为当前路径下的case下的web路径
result = dirname+"\\report\\"  #定义result为当前路径下的report路径

def Creatsuite():
    #定义单元测试容器
    testunit = unittest.TestSuite()  #初始化对象,TestSuite是测试套件

    #定义搜索用例文件的方法,将所有py文件放到discover里面
    discover = unittest.defaultTestLoader.discover(case_path, pattern='*.py', top_level_dir=None)

    #将测试用例加入测试容器中
    for test_suite in discover:  #遍历所有discover的所有py文件
        for casename in test_suite:
            testunit.addTest(casename)  #将py文件中的所有test方法加到测试套件中
        #print testunit
    return testunit

test_case = Creatsuite()   #调用了上面的方法

#获取系统当前时间
now = time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))  #年月日时分秒
day = time.strftime('%Y-%m-%d', time.localtime(time.time()))  #年月日

#定义个报告存放路径,支持相对路径
tdresult = result + day

if os.path.exists(tdresult): # 检验文件夹路径是否已经存在
    filename = tdresult + "\\" + now + "_result.html"  #定义报告名称,精确到秒
    fp = open(filename, 'wb')  #打开
    #定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,  #以流的形式写
                                           title='测试报告',
                                           description='执行情况:')

    #运行测试用例
    runner.run(test_case)
    fp.close()  #关闭报告文件
else:
    os.mkdir(tdresult) # 创建测试报告文件夹
    filename = tdresult + "\\" + now + "_result.html"
    fp = open(filename, 'wb')
    #定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
                                             title='Selenium测试报告',
                                             description='执行情况:')

    #运行测试用例
    runner.run(test_case)
    fp.close()  #关闭报告文件

18.public-login

import time
class Mylogin(object):
    def __init__(self, driver):  #封装了一个init方法
        self.driver = driver  #将driver赋值给self.driver

    def login(self):  #封装登录方法
        self.driver.find_element_by_name("username").send_keys("15696925209")
        self.driver.find_element_by_name("password").send_keys("123456")
        self.driver.find_element_by_xpath("//div[@class='el-form-item']/div[1]").click()
        time.sleep(5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晓白的软件测试进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值