一、免登录
在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考

解决方式:手动请求中添加cookies、火狐的profile文件记录信息实现、人工介入、万能验证码、去掉验证码 1、手动在请求中添加cookies信息
 url = "http://www.baidu.com"
driver = webdriver.Firefox()
driver.get(url)
time.sleep()
#添加cookies的方式 c1 = {'domain': '.baidu.com',
'name':'BDUSS',
'value': 'dyRlBucW9WOUhpNXducElPT1dlVHN1SFdFZUllTkJ-TEg5djNAAVe6gcaGFuc2hvdWthaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHa68lh2uvJYU2',
'path': '/',
'httpOnly': True,
'secure':False
}
driver.add_cookie(c1)
time.sleep()
# print(driver.get_cookies()) #得到当前cookies信息
# driver.delete_all_cookies() #删除所有cookies信息
driver.refresh()
time.sleep() driver.quit()

  2、火狐的profile文件记录信息实现


 #利用火狐profile文件的方式(前提:必须先手动登录一下,且需要勾选记住信息)
profile_ff = "C:/Users/Hanxiaobei/AppData/Roaming/Mozilla/Firefox/Profiles/ytw908g4.default" fp = webdriver.FirefoxProfile(profile_ff)
driver = webdriver.Firefox(fp)
url = "http://www.baidu.com"
driver.get(url)
time.sleep()
driver.quit()
3、人工介入
 driver.find_element_by_link_text("登录").click()
driver.find_element_by_id("TANGRAM__PSP_8__userName").send_keys("hankai")
driver.find_element_by_id("TANGRAM__PSP_8__password").send_keys("hankai")
time.sleep() #导入等待时间人工输入验证码
driver.find_element_by_id("TANGRAM__PSP_8__submit").click() time.sleep()
driver.quit()

  4、万能验证码、去掉验证码

万能验证码、去掉验证码需要开发的配合
二、等待

1、time模块
 import time

 time.sleep()

  2、隐形等待

 driver.implicitly_wait()   

  3、显性等待

 url = "http://www.baidu.com"
driver = webdriver.Firefox()
driver.get(url)
#显性等待
kk = WebDriverWait(driver,).until(lambda driver:driver.find_element_by_id("kw"),message="worry!")
kk.send_keys("测试")

  三、unittest单元测试框架

简单的unittest框架代码如下:

 import unittest,time
from selenium import webdriver
from selenium.webdriver.common.by import By
class Baidu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
url = "http://www.baidu.com"
self.driver.get(url)
self.driver.implicitly_wait()
self.verificationErrors = [] def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors,msg="验证失败") def test_search(self):
self.driver.find_element(By.ID,"kw").send_keys("hanxiaobei")
self.driver.find_element(By.ID,"su").click()
time.sleep() if __name__ == "__main__":
 第一种形式:
#unittest.main()
第二种形式:
1 suite = unittest.TestSuite()
suite.addTest(Baidu("test_search")) runner = unittest.TextTestRunner()
runner.run(suite)

可生成html报告的unittest框架代码如下:

 from selenium import webdriver
import time
import unittest
import HTMLTestRunner class Test_case(unittest.TestCase):
"""测试类"""
def setUp(self):
self.url = "http://www.baidu.com"
self.driver = webdriver.Firefox()
self.driver.implicitly_wait()
self.verificationErrors = [] def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors) def test_sou1(self):
"""测试搜索演示1"""
self.driver.get(self.url)
self.driver.find_element_by_id("kw").send_keys("测试")
self.driver.find_element_by_id("su").click()
self.driver.close()
time.sleep()
def test_sou2(self):
"""测试搜索演示2"""
self.driver.get(self.url)
self.driver.find_element_by_id("k").send_keys("自动化测试")
self.driver.find_element_by_id("su").click()
self.driver.close()
time.sleep() #生成一个运行测试用例集合
suite = unittest.TestSuite()
suite.addTest(Test_case('test_sou1'))
suite.addTest(Test_case('test_sou2')) '''
生成基于html的测试报告:
1定义一个文件的路径
2以写的方式进行打开文件
3调用htmltestrunner的方法生成测试报告
4运行测试集合
5关闭文件
'''
report_file=".\\20170423_report.html"
fp = open(report_file,"wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title="搜索",description="测试搜索结果")
runner.run(suite)
fp.close()

Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架的更多相关文章

  1. Selenium基于Python web自动化基础一 -- 基础汇总及简单操作

    Selenium是UI层WEB端的自动化测试框架,也是目前市面上比较流行的自动化测试框架. ui层自动化测试本质是什么?模拟用户的真实操作行为. 基础汇总: 导入所需要的模块 from seleniu ...

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

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

  3. Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

  4. 第十五章:Python の Web开发基础 (二) JavaScript与DOM

    本課主題 JavaScript 介绍 DOM 介绍 JavaScript 介绍 JavaScript 是一门编程语言,它可以让网页动起来的,JavaScript 的变量有两种,一个是局部变量:一个是全 ...

  5. Python接口自动化基础---cookie绕过登录

    使用fiddler获取登录cookie 对比登录前和登录后的cookis 登录前 登录后: 获得cookie之后,使用cookie访问,就可以获取登录态: import requests url='h ...

  6. python接口自动化(二十一)--unittest简介(详解)

    简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest.熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 T ...

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

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

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

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

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

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

随机推荐

  1. git fetch 和 git pull 的差别

    Git中从远程的分支获取最新的版本号到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本号到本地,不会自己主动merge git fetch origin master git ...

  2. jquery.validate自己定义验证--成功提示与择要提示

    1. 自己定义验证--成功提示 1) 加入选项 errorClass: "unchecked". validClass: "checked", errorEle ...

  3. Iteye已经沦陷

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHl5YXJpZXM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  4. OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解

    近期发现了一个好的opencv博客,准备依照他的顺序系统学习opencv,而且会一一转载过来 之前啃了不少OpenCV的官方文档,发现假设了解了一些OpenCV总体的模块架构后.再重点学习自己感兴趣的 ...

  5. 大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度

    大文本 通过 hadoop spark map reduce   获取 特征列  的 属性值  计算速度

  6. luogu 1901 发射站

    题目大意: 一个数列,它左边第一个比它高的人和右边第一个比它高的人要加上它的权值 思路: 单调栈维护一个单调递减的栈 正反各维护一遍 #include<iostream> #include ...

  7. 第六周 Leetcode 446. Arithmetic Slices II - Subsequence (HARD)

    Leetcode443 题意:给一个长度1000内的整数数列,求有多少个等差的子数列. 如 [2,4,6,8,10]有7个等差子数列. 想了一个O(n^2logn)的DP算法 DP[i][j]为 对于 ...

  8. linux下的C语言开发(静态库/动态库)

    动态链接库不是Linux独有的特性,在windows下面也存在这样的特性.一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的.和静态链接库 ...

  9. bzoj1509

    树的直径 我先开始以为是个图,想想并不知道什么求图的直径的方法,结果是棵树 那么直觉告诉我们是在直径上面,实际上就是直径+min(i->u,i->v),扫一遍就行了 #include< ...

  10. Android 网络请求及数据处理

    Android 网络请求: 1.Volley   http://blog.csdn.net/t12x3456/article/details/9221611 2.Android-Async-Http  ...