Selenium2+python自动化20-引入unittest框架

Selenium2+python自动化20-引入unittest框架

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Baidu(unittest.TestCase):
     def setUp(
self):
         self.driver =webdriver.Firefox()
         self.driver.implicitly_wait(
30)
         
self.base_url = "http://www.baidu.com/"
         
self.verificationErrors = []
         self.accept_next_alert = 
True
     
def test_baidu(self):
         driver = self.driver
         driver.get(self.base_url + 
"/")
        driver.find_element_by_id("kw").send_keys("selenium webdriver")
        driver.find_element_by_id("su").click()
         driver.close()
     
def is_element_present(self,how, what):
         try: 
self.driver.find_element(by=howvalue=what)
         
except NoSuchElementException, e: return False
         
return True
     
def is_alert_present(self):
         
try: self.driver.switch_to_alert()
         
except NoAlertPresentException, e: return False
         
return True
     
def close_alert_and_get_its_text(self):
        
try:
           alert = 
self.driver.switch_to_alert()
           alert_text = alert.text
           
if self.accept_next_alert:
               alert.accept()
           
else:
               alert.dismiss()
           return alert_text
        finally: 
self.accept_next_alert = True
     
def tearDown(self):
          self.driver.quit()
          self.assertEqual([]
self.verificationErrors)
if __name__ == "__main__":
     unittest.main()

啪啪啪上来就是一串代码,是不是有点懵!,下面小编来解释一下:
class Baidu(unittest.TestCase):
Baidu 类继承 unittest.TestCase 类,从TestCase 类继承是告诉 unittest 模块的方式,这是一个测试案例。

def setUp(self):
   self.driver = webdriver.Firefox()
   self.base_url = "http://www.baidu.com/"
setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和 URL 的访问放到初始化部分。

self.verificationErrors = []
脚本运行时,错误的信息将被打印到这个列表中

self.accept_next_alert = True
是否继续接受下一个警告。

def test_baidu(self):
   driver = self.driver
   driver.get(self.base_url + "/")
   driver.find_element_by_id("kw" ).send_keys( "seleniumwebdriver")
   driver.find_element_by_id("su" ).click()
test_baidu 中放置的就是我们的测试脚本了,这部分我们并不陌生;因为我们执行的脚本就在这里

def is_element_present(self, how, what):
try : self.driver.find_element(by=how, value= what)
except NoSuchElementException, e: return False
return True
is_element_present 函数用来查找页面元素是否存在,try...except....为 python 语言的异常捕捉。
is_element_present 函数在这里用处不大,通常删除,因为判断页面元素是否存在一般都加在testcase 中。

def is_alert_present(self):
   try: self.driver.switch_to_alert()
   except NoAlertPresentException, e: return False
   return True
对弹窗异常的处理

def close_alert_and_get_its_text(self):
   try:
       alert = self.driver.switch_to_alert()
       alert_text = alert.text
       if self.accept_next_alert:
           alert.accept()
       else:
           alert.dismiss()
       return alert_text
    finally : self.accept_next_alert = True
关闭警告以及对得到文本框的处理,if 判断语句前面已经多次使用,并不陌生;try....finally...为 python
的异常处理。

def tearDown(self):
   self.driver.quit()
   self.assertEqual([], self.verificationErrors)
tearDown 方法在每个测试方法执行后调用,这个地方做所有测试用例执行完成的清理工作,如退出
浏览器等。

self.assertEqual([], self.verificationErrors)
这个是难点,对前面 verificationErrors 方法获得的列表进行比较;如查 verificationErrors 的列表
不为空,输出列表中的报错信息

if __name__ == "__main__":
   unittest.main()
unitest.main()函数用来测试 类中以 test 开头的测试用例

这样一一分析下来,我们对unittest  框架有了初步的了解。运行脚本,因为引入了unittest 框架,

所以控制台输出了用例的执行个数、时间以及是否ok 等信息。

本篇只是初步对 unittest 的框架进行了分析, 还有许细节将放在后面章节进行讨论, 例如python 的异常处理机制等。

原文地址:https://www.cnblogs.com/jason89/p/9028138.html

时间: 2025-01-05 23:51:16

Selenium2+python自动化20-引入unittest框架的相关文章

Selenium2+python自动化30-引入unittest框架【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/unittest/ from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.co

Selenium2+python自动化52-unittest执行顺序

前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺序. 一.案例分析 1.先定义一个测试类,里面写几个简单的case # coding:utf-8import unittestimport timeclass Test(unittest.TestCase):    def setUp(self):        print "start!"

Selenium2+python自动化52-unittest执行顺序【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/unittest/ 前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺序. 一.案例分析 1.先定义一个测试类,里面写几个简单的case # coding:utf-8import unittestimport timeclass Test

Selenium2+python自动化59-数据驱动(ddt)

前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的.如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一个测试用例,用例自动加载生成. 一.环境准备 1.安装ddt模块,打开cmd输入pip install ddt在线安装 >>pip install ddt 二.数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运

Selenium2+python自动化54-unittest生成测试报告(HTMLTestRunner)

前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一.导入HTMLTestRunner 1.这个模块下载不能通过pip安装了,只能下载后手动导入,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 2.Download下HTMLTestRunner.py文件就是我们需

Selenium2+python自动化20-Excel数据参数化【转载】

前言 问: Python 获取到Excel一列值后怎么用selenium录制的脚本中参数化,比如对登录用户名和密码如何做参数化? 答:可以使用xlrd读取Excel的内容进行参数化.当然为了便于各位小伙伴们详细的了解,小编一一介绍具体的方法. 一.编写登录用例: Step1:访问http://www.effevo.com (打个广告effevo是搜狗自研发的项目管理系统,完全免费,非常好用)Step2:点击页面右上角的登录Step3:输入用户名和密码后登录Step4:检查右上角的头像是否存在实现

Selenium2+python自动化55-unittest之装饰器(@classmethod)【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/unittest/ 前言 前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间. 于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了. 一.装饰器 1.用setUp与setUpClass区别 setup():

Selenium2+python自动化54-unittest生成测试报告(HTMLTestRunner)【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/unittest/ 前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一.导入HTMLTestRunner 1.这个模块下载不能通过pip安装了,只能下载后手动导入,下载地址:http://tungwaiyip.inf

Selenium2+python自动化59-数据驱动(ddt)【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/unittest/ 前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的.如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一个测试用例,用例自动加载生成. 一.环境准备 1.安装ddt模块,打开cmd输入pip install ddt在线安装 >>pip install ddt 二.数据驱