整个工程的目录结构:

常用方法类:

class SeleniumMethod(object):
# 封装Selenium常用方法 def __init__(self, driver):
self.driver = driver def getTitle(self):
# 获取页面标题
return self.driver.title def clearAndInput(self, location, value):
# 根据xpath定位元素并清除、输入
element = self.driver.find_element_by_xpath(location)
element.clear()
element.send_keys(value) def click(self, location):
# 根据xpath定位元素并点击
return self.driver.find_element_by_xpath(location).click() def getText(self, location):
# 根据xpath定位元素并获取文本值
return self.driver.find_element_by_xpath(location).text 页面对象类:
from commonMethod.WebDriverMethod import SeleniumMethod

class BaiduPage(SeleniumMethod):
# 百度页面对象 inputBox = ".//*[@id='kw']"
# 百度输入框
searchBotton = ".//*[@id='su']"
# 百度搜索按钮
oneResult = ".//*[@id='1']/h3/a"
# 搜索结果第一行 def searchChinese(self, keyword):
# 搜索关键字
self.clearAndInput(self.inputBox, keyword)
self.click(self.searchBotton) 测试用例类:
import csv
import unittest
from time import sleep from ddt import ddt, data, unpack
from selenium import webdriver from pageObject.BaiduHome import BaiduPage def getCsvData():
value_rows = []
dataPath = "testCase/testDirectory/testData/CsvTestData.csv"
with open(dataPath, encoding="UTF-8") as f:
f_csv = csv.reader(f)
next(f_csv)
for r in f_csv:
value_rows.append(r)
return value_rows @ddt
class MyTestCase(unittest.TestCase): def setUp(self):
self.driver = webdriver.Firefox(executable_path="drive/geckodriver.exe")
self.driver.maximize_window()
self.driver.get("https://www.baidu.com/")
assert self.driver.title, "百度一下,你就知道"
sleep(2) @data(*getCsvData())
@unpack
def test_searchChinese(self, searchTerm, answerTitle, answerResult):
"""百度搜索的测试用例"""
homePage = BaiduPage(self.driver)
homePage.searchChinese(searchTerm)
sleep(3)
assert homePage.getTitle(), answerTitle
assert homePage.getText(homePage.oneResult), answerResult def tearDown(self):
self.driver.close()
self.driver.quit() if __name__ == '__main__':
unittest.main() 测试执行类:
import HTMLTestRunner

from time import strftime, localtime, time
from unittest import defaultTestLoader if __name__ == "__main__":
testProject = "testCase"
organize = defaultTestLoader.discover(testProject, pattern="*Test.py")
now = strftime("%Y-%m-%M-%H_%M_%S", localtime(time()))
filename = "testCase/testDirectory/report/" + now + ".html"
fp = open(filename, "wb")
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
verbosity=2,
title="测试报告的标题",
description="测试用例执行的情况")
runner.run(organize)
fp.close()

测试数据:
搜索关键词,搜索结果标题,搜索结果第一行
中国,中国_百度搜索,中国_百度百科
美国,美国_百度搜索,美国_百度百科
英国,英国_百度搜索,英国_百度百科 测试报告:


												

Selenium(Python)页面对象+数据驱动测试框架的更多相关文章

  1. Selenium页面工厂+数据驱动测试框架

    工程的目录结构: pom.xml文件: <?xml version="1.0" encoding="UTF-8"?><project xmln ...

  2. Selenium WebDriver 数据驱动测试框架

    Selenium WebDriver 数据驱动测试框架,以QQ邮箱添加联系人为示例,测试框架结构如下图,详细内容请阅读吴晓华编著<Selenium WebDiver 实战宝典>: Obje ...

  3. Java&Selenium自动化测试实现页面元素、页面对象及测试代码分离

    一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...

  4. python 几种常用测试框架

    测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...

  5. Selenium高亮页面对象

    使用QTP习惯了,在QTP中可以通过访问对象的highlight方法直接高亮对象,确实很方便,那么如何让Selenium高亮页面的测试对象了,可以通过javascript修改页面对象的属性进而高亮对象 ...

  6. Selenium 4 Java的最佳测试框架

    几十年来,Java一直是开发应用程序服务器端的首选编程语言.尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试行业的发展,特别是伴随着自动化测试的兴起,已经开发了许 ...

  7. selenium自动化测试之【数据驱动测试】

    数据驱动测试是自动化测试的主流设计模式之一,相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式称为数据驱动.实施数据驱动测试的步骤:1.编写测试脚本,脚 ...

  8. python之robotframework+ride测试框架

    一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...

  9. python之robotframework+pycharm测试框架

    一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...

随机推荐

  1. 启用 DHCP

    #开启DHCP协议 Get-NetIPInterface -Dhcp Disabled|Set-NetIPInterface -Dhcp Enabled #开启本机上所有博通网卡的DHCP Get-W ...

  2. Google Map中的瓦片

    一.墨卡托投影google map使用的是EPSG:900913标准墨卡托投影(等角圆术地图投影)y = R*ln(tan(pi/4 + a/2))x = R*b当y等于piR时,投影图正好为一个正方 ...

  3. oracle空间分析

    相交 sdo_relate(t.geom, sdo_geometry(:geometry,null),\'mask=ANYINTERACT\')=\'TRUE\'

  4. HDU 1735 字数统计(模拟+一点点贪心的思想)

    题目戳我 字数统计 Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. win7环境中使用notepad++配置python IDE

    1, 下载notepad++,并安装 http://notepad-plus-plus.org/download/v6.5.5.html 2, 下载python的win版本,并安装 https://w ...

  6. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

  7. 关于端口冲突的解决方式Error: listen EACCES 0.0.0.80

    笔者昨天下午临走前安装了vs 2017想要运行一下项目的NET后端来让本机的前端直接对接后端,但是没注意到运行vs后IIS直接占用了本机的80端口.第二天跑nodeJS的时候直接Error: list ...

  8. Windows远程常见问题

    1.window2003远程桌面“已达最大连接数”解决:1)mstsc /v:(此处为服务器IP) /console   任务管理器注销已断开用户 mstsc /v:192.168.4.3 /cons ...

  9. angularjs中控制器之间的通信----$on、$emit和$broadcast解析

    $on.$emit和$broadcast使得event.data在controller之间的传递变的简单. $emit只能向parent controller传递event与data $broadca ...

  10. 干货分享:QQ群排名霸屏优化规则靠前的新技术

    谈起QQ群排名的优化规则,很多人又爱又恨,原因很简单,爱他的都是引流效果是非常好的,通过关键词搜索排名好的技术,能排到全国默认前三,叫人怎能不爱他,恨的原因也恨简单,无论你的群完善的再怎么好,好像都无 ...