Selenium+Python进行web自动化测试(Demo+API)
Selenium官方网站
http://selenium-python.readthedocs.io/
配置使用环境
下载相应的浏览器驱动, Firefox 是默认的
本文以 chrome 为主 ,放在scripts目录下
ChromeDriver 官方下载地址 : 所有版本的 ChromeDriver
文档参考
官方文档 : Selenium with Python
一份简单的测试 demo
#coding=utf-8
from selenium import webdriver
import os
import time
# set little time stop and big time stop for viewing changes
little_time_stop = 1
big_time_stop = 2
# 默认广告条数
ads_num_require = 8
# 请求连接
req_url = "http://www.haosou.com/s?ie=utf-8&shb=1&src=360sou_newhome&q=%E9%B2%9C%E8%8A%B1"
# 打开浏览器 browser = webdriver.Chrome()
# 开始请求
17 browser.get(req_url)
# 获取所有的广告 all_ads_li = browser.find_elements_by_css_selector('#e_idea_pp li')
# 当前广告条数
ads_num_current = len(all_ads_li)
print "Has been got %d ads" %(ads_num_current)
# 如果广告条数与默认不符
if ads_num_current < ads_num_require:
print "The number of ads is not enough ( current : %d require: %d)" %(ads_num_current,ads_num_require)
# exit()
# 获取顶部连接
i = 0
for ads_li in all_ads_li:
time.sleep(big_time_stop)
i = i+1
print "ads %d :" %i
try:
main = ads_li.find_element_by_css_selector('h3 a')
except:
print "\tError: ads %d cann't find" %(i)
else:
print "\tReady: visit ads %d" %(i)
main.click()
print "\tSucess: visit ads %d" %(i)
time.sleep(little_time_stop)
try:
img_link = ads_li.find_element_by_class_name('e_biyi_img')
except:
print "\tError : no img in ads %d " %(i)
else:
print "\tReady : visit img_link %d" %(i)
img_link.click()
print "\tSuccess : visit img_link %d" %(i)
time.sleep(little_time_stop)
try:
child_div = ads_li.find_element_by_class_name('e_biyi_childLink');
except:
print "\tError : no child link in ads %d" %(i)
else:
try:
child_links = child_div.find_elements_by_css_selector('a')
except:
print "\tError : find child_links error"
else:
num_links = len(child_links)
print "\tSuccess : there are %d child_links" %(num_links)
j = 0
for child_a in child_links:
j = j + 1
print "\t\tReady : visit child link %d in ads %d" %(j, i)
child_a.click()
print "\t\tSuccess : visit child link %d in ads %d" %(j, i)
time.sleep(little_time_stop)
print "End and thanks for your using!"
# 下面代码选择取消注释
# 延时
# time.sleep(5)
# 关闭当前窗口
# browser.close()
# 关闭所有已经打开的窗口
# browser.quit()
定位操作
以下是所有定位操作的 API :
返回一个匹配元素, 即一个 WebElement 元素
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
返回一个列表, 包含所有匹配的元素, 即一个 WebElement 列表
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
关于 API 的具体介绍, 请参考 :
module-selenium.webdriver.chrome.webdriver
使用的时候需注意下面几点 :
- python selenium 提供了两种对象 :
WebDriver和WebElement
这两种对象都可以使用这些 API
- 这些 API 一旦执行失败(即查找不到), 就会抛出异常
因此必须使用 try: .. except: ... 机制避免错误的行为影响程序继续进行
WebDriver调用以上 API 进行全局定位
WebElement 调用以上 API 可以进行层级定位, 即 查找当前元素的子元素
WebDriver 的使用
开始的时候必须要有初始化一个 WebDriver 实例, 即下面的 browser 用来对浏览器进行控制以及页面的访问
# 请求连接req_url = "http://www.haosou.com/s?ie=utf-8&shb=1&src=360sou_newhome&q=%E9%B2%9C%E8%8A%B1"# 打开浏览器browser = webdriver.Chrome()# 开始请求browser.get(req_url)
接着, 就可以使用以上 API 进行当前页面的全局查找, 比如 :
# 获取所有的广告all_ads_li = browser.find_elements_by_css_selector('#e_idea_pp li')
WebElement 的使用
使用
browser.find_element_by_xx()得到的是一个WebElement实例
使用获得的实例调用上面的 API 即可进行层级查找使用
browser.find_elements_by_xx()得到的是一个元素是WebElement实例的 list
通过对 list 的遍历, 即可对各个实例进行相应的操作
WebDriver 的一些常用操作
browser.curren_url: 获取当前加载页面的 URLbrowser.close(): 关闭当前窗口, 如果当前窗口是最后一个窗口, 浏览器将关闭browser.quit(): 关闭所有窗口并停止 ChromeDriver 的执行browser.add_cookie(cookie_dict): 为当前会话添加 cookiebrowser.get_cookie(name): 得到执行 cookiebrowser.get_cookies(): 得到所有的 cookiedriver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})
browser.delete_all_cookies(): 删除当前会话的所有cookiebrowser.delete_cookie(name): 删除指定 cookiebrowser.back(): 相当于浏览器的后退历史记录browser.forward(): 相当于浏览器的前进历史记录browser.execute_script(script, *args): 同步执行 js 脚本browser.execute_async_script(script, *args): 异步执行 js 脚本browser.get(url): 在当前窗口加载 urlbrowser.refresh(): 刷新当前页面browser.current_window_handle: 当前窗口的 handle, 相当于一个指针一样的东西, 用来指向当前窗口browser.window_handles: 当前浏览器中的已经打开的所有窗口, 是一个 listbrowser.switch_to_window(window_handle): 切换 window_handle 指向的窗口browser.title: 当前页面的 titlebrowser.name: 当前浏览器的名字
具体参照 : module-selenium.webdriver.remote.webdriver
WebElement 的一些常用操作
webEle.clear(): 清楚元素的内容, 假如这个元素是一个文本元素webEle.click(): 点击当前元素webEle,is_displayed(): 当前元素是否可见webEle.is_enabled(): 当前元素是否禁止, 比如经常会禁用一些元素的点击webEle.is_selected(): 当前元素是否选中, 文本输入框的内容webEle.send_keys(*value): 向当前元素模拟键盘事件webEle.submit(): 提交表单webEle.tag_name: 当前元素的标签名webEle.text: 当前元素的内容webEle.get_attribute(name): 获取当前元素执行属性的值
!!本文转自 https://www.zybuluo.com/mwumli/note/222253
Selenium+Python进行web自动化测试(Demo+API)的更多相关文章
- 基于Selenium+Python的web自动化测试框架
一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...
- selenium+python+unittest实现自动化测试(入门篇)
本文主要讲解关于selenium自动化测试框架的入门知识点,教大家如何搭建selenium自动化测试环境,如何用selenium+python+unittest实现web页面的自动化测试,先来看看se ...
- TestNG测试框架在基于Selenium进行的web自动化测试中的应用
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...
- Selenium基于Python 进行 web 自动化测试
配置使用环境 下载相应的浏览器驱动, Firefox 是默认的 本文以 chrome 为主 ,放在scripts目录下ChromeDriver 官方下载地址 : 所有版本的 ChromeDriver ...
- Mac搭建pyhton+selenium+pycharm实现web自动化测试
安装pip或者安装pip3: sudo easy_install pip 二选一安装 sudo easy_install python3-pip 安装selenium: sudo pip3 insta ...
- Robot Framework Selenium(RFS :web自动化测试神器)
Robot Framework 目录 1简介 2特性 3RIDE 1.简介: Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试 ...
- Python 的web自动化测试
安装selenium 上面python已安装完毕,接下来安装selenium. 安装selenium之前需安装些必要工具 1. 安装setuptools 下载地址:https://pypi.pytho ...
- selenium+python—实现基本自动化测试
安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium I ...
- python之web自动化测试框架
梳理下搭建web自动化框架的流程: 创建目录: cases:存放测试用例,unittest框架要求用例名必须以test开头,所以命名test_case.py test_case.py代码如下:继承un ...
随机推荐
- CUDA与OpenGL互操作
当处理较大数据量的时候,往往会用GPU进行运算,比如OpenGL或者CUDA.在实际的操作中,往往CUDA实现并行计算会比OpenGL更加方便,而OpenGL在进行后期渲染更具有优势.由于CUDA中的 ...
- 小白的Python之路 day5 logging模块
logging模块的特点及用法 一.概述 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你 ...
- 源码讲解 node+mongodb 建站攻略(一期)第二节
源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...
- redux学习日志:关于react-redux
首先先强调一句:一定要多读官方文档,而且要精读,否则你会忽略掉很多东西! 一,Provider 刚开始看的时候,大致浏览了一下,知道了这个组件是能够接收store作为它的属性,然后它里面的子组件就可以 ...
- 谈Ajax的Get和Post的区别
Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行 ...
- pythhon_如何读写json数据
案例: 在web应用中常常用到json数据进行传输数据,本质上是字典类型数据转换成字符串,通过字符串进行网页传输,然后把接收到的字符串转换成字典类似数据 需求:实现字典转换成字符串,字符串转换成字典数 ...
- linkin大话面向对象--方法详解
1,方法的参数传递机制:值传递. 首先弄懂2个概念:形参和实参. 形参(形式参数):相当于函数(Java中也把函数称之为方法)中的局部变量,在函数被调用时创建,并以传入的实参作为起始值,函数调用结束时 ...
- 在阿里云上搭建自己的git服务器
这篇文章我就来介绍一下如何在一台全裸的阿里云主机上搭建自己的git服务器. 1. 安装git 首先安装git,一般而言,现在的服务器已经内置了git安装包,我们只需要执行简单的安装命令即可安装.比如: ...
- MySQL主从复制-xtrabackup的使用与延时复制(附原理图)
标签(linux): mysql 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 xtrabackup是percona公司针对MySQL开发的一款开源的物理备份工 ...
- 2017noip普及组赛前注意事项总结
petr 大神镇场 距人生第一场noip只差4天半了(好紧张) 总结几下四道题的做题策略 NO1 第一题一般是送分的,认真读题,别太草率,多想几遍再动手,把重要的地方圈一圈.画一画,自己找几个数据多试 ...