学习隔壁大神的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()

生成报告

最新文章

  1. tomcat安全配置(二)
  2. Eclipse + Idea + Maven + Scala + Spark +sbt
  3. Eclipse中创建标准web工程以及标准目录结构说明
  4. LinkedList源代码深入剖析
  5. Observer 观察者模式
  6. REST和SOAP Web Service的比较
  7. CSS常见BUG
  8. C++关键字之static
  9. Hibernate逆向代码问题
  10. MapReduce 入门之一步步自实现词频统计功能
  11. form 表单提交返回值问题
  12. CSAPP:第一章学习笔记:斗之气1段
  13. [ASNI C] [常用宏定义] [define技巧]
  14. Freemarker导出带图片的word
  15. 常见的压缩文件格式案例tarZ
  16. xcode 各版本下载地址及其它工具下载地址
  17. linux几种查看日志的方法
  18. 使用gitlab, jenkins搭建CI(持续集成)系统(2) -- 配置webhook触发构建
  19. spring boot thymeleaf常用方式
  20. Redis 缓存穿透,缓存击穿,缓存雪崩的解决方案分析

热门文章

  1. fread与fread_s读取文件(二进制文件)
  2. [Luogu1282]多米诺骨牌(DP)
  3. vlc-android native调试配置
  4. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第四件事就是 修改第三件事信号量超时改为 事件 超时,并增加 事件控制 ,用于控制LED 闪烁时间或者关闭
  5. 截屏状态监听 - iOS
  6. Ubuntu SSH登陆出现Access Denied错误
  7. 九九乘法表,全js编写,放入table表格带入页面渲染出来
  8. php 获取当前完整url地址
  9. Shell学习——子shell操作记录转储
  10. 基于 FPGA 的 PCIE 总线 Linux 驱动设计