学习隔壁大神的POM框架,结合自己的用例进行修改整理并执行,操作遇到的主要问题是如何分布的写各个模块并统一运行,每个文件夹想要import里面的模块需要有__init__模块

POM主要分为三个部分,1、将selenium的基本操作写为自己的函数,2、将用例操作运用自己的操作函数写出步骤,3、加入unittest模块和报告模块,当然后还需要一个执行的主函数部分

#encoding=utf-8
from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.implicitly_wait(30)

class Page(object):
  def __init__(self, driver, base_url=u"http://www.baidu.com/"):
    self.driver = driver
    self.base_url = base_url
    self.timeout = 30

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

  def input_clear(self,loc):
    self.find_element(*loc).clear()

  def input_text(self, loc, text):
    self.find_element(*loc).send_keys(text)

  def click(self, loc):
    self.find_element(*loc).click()

  def get_title(self):
    return self.driver.title

from selenium.webdriver.common.by import By
from P.basePage import Page

reload(sys)
sys.setdefaultencoding("utf-8")

class SearchPage(Page):

  search_input = (By.ID, u'kw')

  search_button = (By.ID, u'su')

  def __init__(self, driver, base_url=u"http://www.baidu.com/"):
    Page.__init__(self, driver, base_url)

  def gotoPage(self):
    print u"打开首页: ", self.base_url
    self.driver.get(self.base_url)

  def input_search_clear(self):
    print u"清除默认值 "
    self.input_clear(self.search_input)

  def input_search_text(self, text=u"自动化测试报告"):
    print u"输入搜索关键字: 自动化测试报告 "
    self.input_text(self.search_input, text)

  def click_search_btn(self):
    print u"点击 确定 按钮"
    self.click(self.search_button)

这两个类的本质是将元素的定位和元素的操作分开

#encoding=utf-8
import unittest
import sys,time

from selenium import webdriver
from P.searchPage import SearchPage

reload(sys)
sys.setdefaultencoding("utf-8")

# 百度搜索测试
class TestSearchPage(unittest.TestCase):

  def setUp(self):
    self.driver = webdriver.Firefox()

  def testSearch(self):
    driver = self.driver
    # 百度网址
    url = u"http://www.baidu.com/"
    # 搜索文本
    text = u"自动化测试报告"
    # 期望验证的标题
    assert_title = u"自动化测试报告_百度搜索"
    print assert_title

    search_Page = SearchPage(driver, url)

    # 启动浏览器,访问百度首页
    search_Page.gotoPage()

    #清空默认值
    search_Page.input_search_clear()

    # 输入 搜索词
    search_Page.input_search_text(text)

    # 单击 百度一下 按钮进行搜索
    search_Page.click_search_btn()

    time.sleep(2)
    # 验证标题
    self.assertEqual(search_Page.get_title(), assert_title)

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

    断言结果正确

以上为POM框架,添加批量执行和报告

#encoding=utf-8
import unittest
import sys

import HTMLTestRunner
from O.testSearchPage import TestSearchPage

if __name__ == '__main__':
    testunit = unittest.TestSuite()
    testunit.addTest(TestSearchPage('testSearch'))

    # 定义报告输出路径
    htmlPath = u"page_demo_Report.html"
    fp = file(htmlPath, "wb")

    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
      title=u"baidu测试",
      description=u"测试用例结果")
    runner.run(testunit)

    fp.close()

生成报告

selenium、unittest——POM框架并出报告的更多相关文章

  1. Python+Selenium ----unittest单元测试框架

    unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

  2. python + selenium + unittest 自动化测试框架 -- 入门篇

    . 预置条件: 1. python已安装 2. pycharm已安装 3. selenium已安装 4. chrome.driver 驱动已下载 二.工程建立 1. New Project:建立自己的 ...

  3. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  4. Python+selenium之简单介绍unittest单元测试框架

    Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

  5. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  6. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  7. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  8. Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例

    1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...

  9. <day002>Selenium基本操作+unittest测试框架

    任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...

随机推荐

  1. 算法——(4)哈希、hashmap、hashtable

    1. Hash 把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值.拥有四个特性: 1. 拥有无限的输入域和固定大小的输出域 2. 如果输入值相同,返回值一样 3. 如果输入值不相同 ...

  2. PAT——1053. 住房空置率

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房为“可能空置”: 若观察期超过某 ...

  3. Java语言实现通过Ajax抓取后台数据及图片

    1.Java语言实现通过Ajax抓取后台数据及图片信息 1.1数据库设计: create table picture( pic_id number not null, pic_name )not nu ...

  4. CSP 试题编号201803-2 Java实现

    package HB; import java.util.Scanner; public class Test_06 { public static void main(String[] args) ...

  5. 处理Model

    将Model对象归档解档 - CSDN博客 iOS archive(归档)的总结 - 苹果吧 - 博客园 IOS数据持久化之归档NSKeyedArchiver,iosnskeyedarchiver_I ...

  6. 在正文部分操作accordion内容展开和闭合

    $('#accordionid').accordion("select",0);             //展开第一个title $('#accordionid').accord ...

  7. c#网络传输

    接着前面简单讲的,给大家聊聊服务开发. 网络传输 先说网络传输开发,总体来说,可以看成4中模型 我们把传输过程看做网线,那么在通过传输的过程中.2边就涉及池化问题,也就是我们常见的异步传输. 在业务端 ...

  8. Extjs 中callParent的作用

    callParent 是 Sencha 类系统提供的一个用于调用你父/祖先类中的方法. 这个通常用于当你 继承一个框架类 或者 覆写一个类中提供的方法(比如 onRender) 时. 当你在一个带参数 ...

  9. jdk 配置

    JDK (绿色版)      此次安装的 JDK 版本为  1.8.0_77 步骤一: 拷贝 JDK(350M左右)到电脑 步骤二: 配置环境变量  JAVA_HOME  , PATH  ,  CLA ...

  10. Hammer.js 实现移动端元素的拖拽库

    1. Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件.这个事件在屏触开发中比较常用,如:左拖动.右拖动等,如手要上使用QQ时向右滑动出现功能菜单的效果.该事件还可以分别对 ...