zoukankan      html  css  js  c++  java
  • selenium bbs测试实例

    一、项目结构

    在report目录 下,再新建一层image,用来存放运行过程中的截图

    一、编写浏览器驱动脚本:models-driver.py

    from selenium.webdriver import Remote
    from selenium import webdriver

    #启动浏览器驱动
    def borwser():
    #driver = webdriver.Firefox()
    #driver = Remote(command_executor='http://' + host +'/wd/hub',desired_capabilities = dri )

    driver = Remote(command_executor='http://localhost:4444/wd/hub',
    desired_capabilities={'platform': 'ANY',
    'browserName':'firefox',
    'version': '',
    'javascriptEnabled': True
    })

    return driver

    if __name__ == '__main__':
    dr = borwser()
    dr.get("http://www.baidu.com")
    dr.quit()

    注意:desired_capabilities的写法要符合规范,否则会报webdriver.py的各种错误

     二、编写基础类脚本page_objase.py

    class Page(object):
    '''
    页面基本类,用于所有页面的继承
    '''
    bbs_url = 'http://bbs.meizu.cn'
    def __init__(self,selenium_driver,base_url = bbs_url,parent = None):
    self.base_url = bbs_url
    self.driver = selenium_driver
    self.timeout = 30
    self.parent = parent

    def _open(self,url):
    url = self.base_url + url
    self.driver.get (url)
    assert self.on_page(),'Did not land on &s' %url

    #定位单个元素
    def _find_element(self,*loc):
    return self.driver.find_element(*loc)

    #定位多个元素
    def _find_elements(self,*loc):
    return self.driver.find_elements(*loc)

    #打开浏览器地址
    def open(self):
    self._open(self.url)

    def on_page(self):
    return self.driver.current_url == (self.base_url + self.url)

    def script(self,src):
    return self.driver.execute_script(src)

     三、编写浏览器启动脚本:test_casemodelsmyunit.py

    from selenium import webdriver
    from .driver import browser
    import unittest
    import os

    #把浏览器引过来,以后不用动,打开浏览器,等待10秒,窗口最大化
    class MyTest(unittest.TestCase):
    def setUp(self):
    self.driver = browser()
    self.driver.implicitly_wait(10)
    self.driver.maxmize_window()


    def tearDown(self):
    self.driver.quit()

    四、编写截图保存功能脚本:test_casemodelsfunction.py

    from selenium import webdriver
    import os

    #截图保存
    def insert_img(driver,file_name):
    base_dir = os.path.dirname(os.path.dirname(__file__))
    base_dir = str(base_dir)
    base_dir = base_dir.replace('\','/')
    base = base_dir.split('/test_case')[0]
    file_path = base + "/report/image/" + file_name
    driver.get_screenshot_as_file(file_path)

    #以下内容为做实验,实际使用时,可注释,执行后,在D:selenium-zidonghuamyprojectbs eportimage目录下,生成一张baidu.png图片
    if __name__ == "__main__":
    driver =webdriver.Firefox()
    driver.get("http://www.baidu.com")
    insert_img(driver,'baidu.png')
    driver.quit() 

    五、编写登录页的类脚本:test_casepage_objloginPage.py

    #coding=utf-8
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from base import Page
    from time import sleep

    class login(Page):
    """
    用户登录界面
    """
    url = '/'

    #ActionChains
    #bbs_login_user_loc = (By.XPATH,"//div[@id='mzCust']/div/img") #或者使用以下语句代替,根据实据情况
    bbs_login_user_loc = (By.CLASS_NAME,"alertDialogContent")
    bbs_login_button_loc = (By.ID,"mzLogin")

    def bbs_login(self):
    self.find_element (*self.bbs_login_user_loc).click()
    sleep(1)
    self.find_element(*self.bbs_login_buton_loc).click()
    sleep(1)

    #如果以上语句鼠标悬停无法出来,可使用直接打开这个相应的页面
    #self._open("/login.php?")

    login_username_loc = (By.ID,'account')
    login_password_loc = (By.ID,'password')
    login_button_loc = (By.ID,'login')

    #登录用户名
    def login_username(self,username):
    self.find_element(*self,login_username_loc).send_keys(username)

    #登录密码
    def login_password(self,password):
    self.find_element(*self,login_password_loc).send_keys(password)

    #登录按钮
    def login_button(self):
    self.find_element(*self,login_button_loc).click()


    #定义统一登录入口
    def user_login(self,username='username',password='111111'):
    """获取用户名密码登录"""
    self.open()
    self.bbs_login()
    self.login_username(username)
    self.login_password_loc(password)
    self.login_button()
    sleep(2)

    user_error_hint_loc = (By.XPATH,"//span[@for='account']")
    pass_error_hint_loc = (By.XPATH,"//span[@for = 'password']")
    user_login_success_loc = (By.ID,'mzCustName')

    #用户名错误提示
    def user_error_hint(self):
    return self.find_element(*self.user_error_hint_loc).text

    #密码错误提示
    def user_error_hint(self):
    return self.find_element(*self.pawd_error_hint_loc).text

    #登录成功用户名
    def user_login_success(self):
    return self.find_element(*self.user_login_success_loc).text

    六、编写登录的测试用例test_caselogin_sta.py

    #coding=utf-8
    from time import sleep
    import unittest,random,sys
    sys.path.append("./models/")
    sys.path.append(".page_obj")
    from modeles import myunit,function
    from page_obj.loginPage import login

    class loginTest(myunit.MyTest):
    """社区登录测试"""

    #测试登录用户
    def user_login_verify(self,username='',password=''):
    login(self.driver).user_login(username,password)

    def test_login1(self):
    """用户名、密码为空登录"""
    self.user_login_verify()
    po = login(self.driver)
    self.assertEqual(po.user_error_hint(),'账号不能为空')
    self.assertEqual(po.pawd_error_hint(),'密码不能为空')
    function.insert_img(self.driver,"user_pawd_empth.jpg")


    def test_login2(self):
    """用户名正确、密码为空登录"""
    self.user_login_verify(username = 'pytest')
    po = login(self.driver)
    self.assertEqual (po.pawd_error_hint(),"密码不能为空")
    function.insert_img(self.driver,"pawd_empth.jpg")

    def test_login3(self):
    """用户名为空,密码正确"""
    self.user_login_verify(password = '123456')
    po = login(self.driver)
    self.assertEqual (po.user_error_hint(),'账号不能为空')
    function.insert_img(self.driver,"user_empty.jpg")

    def test_login4(self):
    """用户名与密码不匹配"""
    character = random.choise('fjdsljfldsjfldsjfldsfdsfdf')
    username = "zhangsan" + character
    self.user_login_verify(usesrname=username,password = '123456')
    po = login(self.driver)
    self.assertEqual (po.pawd_error_hint(),'密码与账号不匹配')
    function.insert_img(self.driver,"user_pawd_error.jpg")

    def test_login5(self):
    """用户名密码正确"""
    self.user_login_verify(username='zhangsan',passwd='123456'
    sleep (2)
    po = login(self,driver)
    self.assertEqual(po.user_login_success(),"张三")
    function.insert_img(self.driver,"user_pawd_true.jpg")

    if __name__ == "__main__":
    unittest.main()

    七、编写最终的运行脚本,并发送运行报告的邮件:与项目bbs同级:run_bbs_case.py

    #coding=utf-8
    from HTMLTestRunner import HTMLTestRunner
    from email.mime.text import MIMEText
    from email.header import header
    import smtplib
    import unittest
    import time
    import os

    #===============定义发送邮件==================
    def send_mail(file_new):
    f = open(file_new,'rb')
    mail_body = f.read()
    f.close()

    msg = MIMEText(mail_body,'html','utf-8')
    msg[Subject] = Header("自动化测试报告")

    smtp = smtplib.SMTP()
    smtp.connect("smtp.126.com")
    smtp.login("username@126.com","123456")
    smtp.sendmail("username@126.com","receive@126.com",msg.as_string())
    smtp.quit()
    print("email has send out!")

    #=====查找测试报告目录,找到最新生成的测试报告文件======
    def new_report(testreport):
    lists = os.listdir(testreport)
    lists.sort(key=lamba fn:os.path.gettime(testreport + "\" + fn))
    file_new = os.path.jooin(testreport,list[-1])
    print (file_new)
    return file_new

    if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    filename = './bbs/report' + now +'result.html'
    fp = open (filename,'wb')
    runner = HTMLTestRunner(stream = fp,
    title='自动化测试报告',
    description='环境:win10')
    discover = unittest.defaultTestLoader.discover('./bbs/test_case',
    pattern = '*_sta.py')
    runner.run(discover)
    fp.close()
    file_path = new_report('./bbs/report/')
    send_mail(file_path)

  • 相关阅读:
    win10 1607 安装密钥 GVLK
    计算机意外地重新启动或遇到错误。windows安装无法继续。若要安装windows 请单击 确定 重新启动计算机
    在Mac中使用「dd」指令烧录ISO镜像文件到U盘
    一款免费好用的正则表达式工具:Regex Match Tracer
    全国移动短信信息中心号码查询大全
    VS2008 LINK : fatal error LNK1104: cannot open file 'atls.lib'错误解决方案
    理解全概率公式与贝叶斯公式
    改善程序员生活质量的 3+10 习惯
    TCP选项之SO_RCVBUF和SO_SNDBUF
    OpenSSL开发学习总结
  • 原文地址:https://www.cnblogs.com/bzdmz/p/10356526.html
Copyright © 2011-2022 走看看