selenium webdriver自动化实战--测试126邮箱

mail126项目介绍

项目地址:https://pan.baidu.com/s/1G_CgDg8-mOgc4gCmc0gHAg  密码:hnp1

1,项目功能介绍

自动化方式进行126邮箱登录、发送邮件及添加常用联系人

2,使用的框架和技术介绍

框架

自动化框架:seleniumwebdriver

数据驱动:将所有的操作中输入的参数提取到固定文件中,方便维护

关键字驱动:将所有的操作步骤以关键字形式写入文件,读取关键字文件,执行操作步骤

技术

单元测试:unittest

生成测试报告:HTMLTestRunner

python编程:常用数据类型基本使用、面向对象、文件操作、目录操作、包和模块、异常处理、eval方法、编码知识等

selenium webdriver 常用API

3,模块介绍

action模块

login.py文件主要用来执行邮箱登录功能

send_mail.py文件主要用来执行邮箱发送邮件功能

add_contact.py文件主要用来执行邮箱添加常用联系人功能

public_function.py文件提供了以上三个文件的所需公用方法

util模块

mywait.py文件将显示等待封装成函数

read_keyword.py文件读取keyword.data配置文件,调用get_command_line(action_name)

方法得到对应关键字的操作命令。比如传入—login—参数,就会得到登录操作的所有关键字

read_parameter.py:读取参数文件,以固定形式返回参数内容

profile模块

keyword.data:登录、发送邮件、添加常用联系人功能的操作步骤

parameter.txt:登录地址、用户信息

run.py

将登录、发送邮件、添加联系人功能加入测试集、执行测试集生成html测试报告

mail126_report.html

4,项目的目录结构

5,分模块详解源码

见源码注释

mail126/run.py

#coding=utf-8
import unittest
import HTMLTestRunner
from action import  *
suit1=unittest.TestLoader().loadTestsFromTestCase(login.TestLogin)
suit2=unittest.TestLoader().loadTestsFromTestCase(add_contact.Add_Contact)
suit3=unittest.TestLoader().loadTestsFromTestCase(send_mail.test_Send_Mail)
suit=unittest.TestSuite([suit1,suit2,suit3])
# unittest.TextTestRunner(verbosity = 2).run(suit)
fp = file('mail126_report.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
               
stream=fp,
               
title=u'测试报告',
               
description=u'测试总结'
               
)
runner.run(suit)

action模块

action\__init__.py

#由于run.py文件中只导入了action报名,想要访问包中的文件需要在__init__中加入对应文件名
__all__=['login','add_contact','send_mail']

action\__public_fuction.py

#coding=utf-8
from selenium import webdriver
from selenium.common.exceptionsimport NoSuchElementException
global driver
#获取驱动
def get_driver():
   
return driver
#获取url(打开的浏览器带上默认配置)
def get_url(url,load_time):
   
global driver
   
proPath = "C:\Users\libai\AppData\Roaming\Mozilla\Firefox\Profiles\\18uwgrhd.default"
   
profile =webdriver.firefox.firefox_profile.FirefoxProfile(proPath)
   
profile.set_preference("browser.startup.homepage", url)
   
profile.set_preference("browser.startup.page", 1)
   
# 启动带自定义配置文件的Firefox浏览器
   
driver =webdriver.Firefox( firefox_profile=profile)
   
driver.set_page_load_timeout(load_time)
    try:
       
driver.get(url)
    except Exception,e:
       
print '%s页面加载超时' %url
#切换frame
def switch_to_frame(id_or_name=None,xpath=None):
   
try:
       
if xpath is None:
           
driver.switch_to.frame(id_or_name)
        elif id_or_name is None:

           
driver.switch_to.frame(driver.find_element_by_xpath(xpath))
    except NoSuchElementException,e:
       
print '没有找到frame'
        print
e
#切出frame
def switch_out_frame():
   
driver.switch_to.default_content()
def input(xpath,content):
   
try:
       
element=driver.find_element_by_xpath(xpath)
    except NoSuchElementException,e:
       
print '找不到元素:%s' %xpath
       
print e
   
element.clear()
    element.send_keys(content)
#点击元素
def click(xpath):
   
try:
       
driver.find_element_by_xpath(xpath).click()
    except NoSuchElementException,e:
       
print '找不到元素:%s' %xpath
       
print e
   
#element.click()
#断言

def AssertKeyword(contant):
   
try:
       
assert contant in driver.page_source
   
except AssertionError,e:
       
print '断言失败'
        print
e
#设置等待时间(死等)
def si_wait(second):
   
import time
   
time.sleep(second)
#设置智能等待
def implicitly_wait(second):
   
driver.implicitly_wait(second)
#获取网页内容
def get_page_source():
   
return driver.page_source
#退出浏览器
def quit():
  
 # global driver
   
driver.quit()

action\__login.py

#coding=utf-8
from mail126.util.read_parameterimport *
from mail126.util.mywaitimport *
from mail126.util.read_keywordimport  *
from mail126.action.public_functionimport *
import unittest
class TestLogin(unittest.TestCase):
   
def setUp(self):
       
#获取登录的关键字
       
self.login_command=get_command_line('--login--')
   
def test1(self):
       
print 'aaa'
   
#@unittest.skip('skipping')
   
def test_login(self):
       
#导入显示等待封装类
       
wait=MyWait()
       
#将每行内容以回车符切割放到list中逐行获取
       
for line in self.login_command.strip().split('\n'):
               
data=line.strip().split('||')
               
#分别判断每行关键字中有几个参数,根据参数个数的不同,得到不同的命令
               
if len(data)==1:
                   
command='%s()' %data[0]
               
elif len(data)==2:
                   
command='%s(%s)' %(data[0],data[1].decode('utf-8'))
               
elif len(data)==3:
                   
command='%s(%s,%s)' %(data[0],data[1],data[2])
               
elif len(data)==4:
         
          command='%s(%s,%s,%s)' %(data[0],data[1],data[2],data[3])
               
if isinstance(command,str):
                   
print command.decode('utf-8')
               
else:
                   
print command
               
#执行命令
               
eval(command)
if __name__=='__main__':
   
unittest.main()

action\__add_contact.py

#coding=utf-8
from login import *
import unittest
from mail126.util.read_keywordimport *
from mail126.util.mywaitimport *
class Add_Contact(unittest.TestCase):
   
def setUp(self):
       
self.add_contact_command=get_command_line('--add_contact--')
   
def test2(self):
       
print 'bbb'
   
#@unittest.skip('skipping')
   
def test_add_contact(self):
       
wait=MyWait()
       
for line in self.add_contact_command.strip().split('\n'):
    
           data=line.strip().split('||')
               
if len(data)==1:
                   
command='%s()' %data[0]
               
elif len(data)==2:
                   
command='%s(%s)' %(data[0],data[1].decode('utf-8'))
               
elif len(data)==3:
                   
command='%s(%s,%s)' %(data[0],data[1],data[2].decode('utf-8'))
               
elif len(data)==4:
                   
command='%s(%s,%s,%s)' %(data[0],data[1],data[2

猜你喜欢

转载自blog.csdn.net/qq_32551117/article/details/80854607