采用page object模式 自动化测试邮箱登录,发邮件的功能(selenium,python,unittest)

采用PO设计模式:
目录结构:
在这里插入图片描述
qq_test:项目名称

  • driver:可以存放不同浏览器的驱动文件
  • package:存放自动化所用到的扩展包
  • qq:
    • qq_case
    • model:公共配置的函数及公共类
      • page_obj:测试用例的页面对象
      • test*.py:测试用例
  • run_test:执行所有测试用例,并生成测试报告

base_el:对每个页面都可能用到的函数进行了定义

#coding=utf-8

class Page(object):

	def __init__(self,driver):
		self.driver=driver
		self.timeout=30

	def find_element(self,*loc):
		return self.driver.find_element(*loc)
		
	def script(self,src):
		return self.driver.ececute_script(src)

	def js_scroll_end(self):
		js_heig = "window.scrollTo(0, document.body.scrollHeight)"
		self.driver.execute_script(js_heig)

	def open(self,url="https://mail.qq.com"):
		self.driver.get(url)

sendmailPage.py:对qq写信界面进行了函数封装

#coding=utf-8
from selenium.webdriver.common.by import By
import base_el
import unittest
class sendmailPage(base_el.Page):

	sendmail_write_loc=(By.LINK_TEXT,u"写信")#点击写信
	sendmail_frame_loc="mainFrame"#切换到写信界面
	sendmail_rec_loc=(By.CSS_SELECTOR,'#toAreaCtrl > div.addr_text > input.js_input')#收件人
	sendmail_sub_loc=(By.ID,"subject")#主题
	sendmail_textFrame_loc='//iframe[@scrolling="auto"]'#切换写信的框架
	sendmail_text_loc=(By.XPATH,"html/body")
	sendmail_send_loc=(By.LINK_TEXT,u"发送")

	def type_write(self):
		self.find_element(*self.sendmail_write_loc).click()

	def switch_toText_frame(self,sendmail_frame_loc):
		return self.driver.switch_to.frame(sendmail_frame_loc)

	def sendmail_rec(self,rec):
		self.find_element(*self.sendmail_rec_loc).send_keys(rec)

	def sendmail_sub(self,sub):
		self.find_element(*self.sendmail_sub_loc).send_keys(sub)

	def sendmail_textFrame(self,sendmail_textFrame_loc):
		return self.driver.switch_to.frame(self.driver.find_element_by_xpath(sendmail_textFrame_loc))#到写正文的框架

	def sendmail_text(self,text):
		self.find_element(*self.sendmail_text_loc).send_keys(text)

	def sendmail_send(self):
		self.find_element(*self.sendmail_send_loc).click()

	def sendmail_login1(self,rec,sub,text,frame1='mainFrame',frame2='//iframe[@scrolling="auto"]'):#不能命名test*   要有self
		self.type_write()
		self.switch_toText_frame(frame1)#切换到写收件人框架
		self.sendmail_rec(rec)
		self.sendmail_sub(sub)
		self.driver.switch_to.default_content()#回到topwindow
		self.switch_toText_frame(frame1)#切换到写收件人框架
		self.sendmail_textFrame(frame2)#切换到写信框架
		self.sendmail_text(text)#写信
		self.driver.switch_to.parent_frame()#回到上层
		self.sendmail_send()

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

run_test:执行所有测试用例,并生成测试报告

#coding=utf-8
import unittest
import HTMLTestRunner
import os,time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
reload(sys)# Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入 
sys.setdefaultencoding('utf8')

def new_report(testreport):
    lists=os.listdir(testreport)#用于获取目录下的所有文件列表
    lists.sort(key=lambda fn:os.path.getmtime(testreport+"\\"+fn))
    file_new=os.path.join(testreport,lists[-1])
    print(file_new)
    return file_new

def send_mail(file_new):
    f=open(file_new,"rb")
    mail_body=f.read()
    f.close()
    smtserver="smtp.qq.com"  #设置服务器
    mail_user="********@qq.com"    #用户名
    mail_pass="dwvv" #口令 (隐藏了)
    sender = '*****@qq.com'  #发送邮箱的地址
    receiver = '*******@qq.com'  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    message = MIMEText(mail_body,"html",'utf-8')
    message['From'] = Header(u'ma', 'utf-8')
    message['To'] =  Header(u'jin','utf-8')
    message['Subject'] = Header('测试报告', 'utf-8')#邮件标题
    message["date"]=time.strftime("%a, %d %b %Y %H:%M:%S %z")
    try:
        smtpObj = smtplib.SMTP() 
        smtpObj.connect(smtserver)    # 25 为 SMTP 端口号
        smtpObj.login(mail_user,mail_pass)  
        smtpObj.sendmail(sender, receiver, message.as_string())
        print "邮件发送成功"
    except smtplib.SMTPException as msg:
        print(msg)

if __name__ == "__main__":

    now=time.strftime("%Y_%m_%d_%H_%M_%S")
    filename = './qq/report/'+ now +'result.html'
    fp=open(filename,'wb')#打开该文件,没有的话自动创建
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
                            title=u"测试报告",  # 浏览器及报告title
                            description=u'用例执行情况:')
    try:
        #casePath='D:\\jin_python\\qq_test\\qq\qq_case\\'
        casePath= 'E:\\learn\\qq_test\\qq\qq_case\\'
        discover=unittest.defaultTestLoader.discover(start_dir=casePath)#加载所有的"test*."开头的用例
        #print(discover)
        runner.run(discover)
    except Exception as msg:
        print(msg)

    fp.close()
    file_path=new_report('./qq/report/')
    send_mail(file_path)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43245972/article/details/86522232