本篇随笔为散集。不多逼逼直接干


step 1:使用webdriver调用浏览器,webdriver支持的浏览器为Firefox(),IE(),Chrome(),不同的浏览器需要安装不同的驱动。

本文使用的火狐浏览器:webdriver.Firefox(),通过get()函数打开某一网址。

from selenium import webdriver
import time driver = webdriver.Firefox()
driver.get("http://172.18.xxxxxxxxxxxxx.jsp") driver.maximize_window() #将浏览器最大化显示
driver.set_window_size(800,600)#设置浏览器显示大小
driver.back()#当前浏览器后退
driver.forward()#当前浏览器前进

step2:定位元素对象,需要获取页面上的一组元素是的方法:find_elements/find_element,不熟悉的同学建议使用firebug,F12打开

网页,使用鼠标获取需要定位的元素对象。如百度的输入框和百度一下定位如图,可同过ID来定位

#find_elements 用于获取一组元素。
find_elements_by_id(‘xx’)#查找元素的id
find_elements_by_name(‘xx’)#查找元素的name
find_elements_by_class_name(‘xx’)#查找元素的类名
find_elements_by_tag_name(‘xx’)#查找元素的标签名
find_elements_by_link_text(‘xx’)#查找元素的链接文本
find_elements_by_partial_link_text(‘xx’)#查找元素的链接的部分文本
find_elements_by_xpath(‘xx’)#查找元素内的子元素的xpath
find_elements_by_css_selector(‘xx’)#查找并返回多个元素的CSS 选择器列表 通常使用find_element_by 单个元素定位

可以使用for... in ...对这一组元素进行遍历

for checkbox in checkboxes:
checkbox.click()

我们获取到一组元素之后也可以使用pop()方法获得这一组元素中的第几个,然后再对该元素进行操作:

find_elements_by_id(‘xx’).pop().click()
  • pop()或pop(-1)默认获取一组元素中的最后一个
  • pop(0)   默认获取一组元素的第一个元素
  • pop(1)   默认获取一组元素的第二个元素
  • ......以此类推

step3:操作元素

操作对象:

  • · click 点击对象
  • · send_keys 在对象上模拟按键输入
  • · clear 清除对象的内容,如果可以的话
  • .submit 提交表单

ActionChains 类

  • context_click()  右击
  • double_click()   双击
  • drag_and_drop()  拖动

WebElement  另一些常用方法:

  • · text  获取该元素的文本
  • · submit  提交表单
  • · get_attribute  获得属性值

实例:登录百度

from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("http://ww.baidu.com")
print(browser.title)
browser.find_element_by_id('kw').send_keys("selenium")#百度主页定位输入框输入selenium
time.sleep(5)
browser.find_element_by_id("su").click()#百度主页定位【百度一下】,点击
time.sleep(5)
browser.quit()#退出

定位输入时可加入

time.sleep()

运行太快可加入sleep函数

函数的真正用途不是给我们看脚本的运行过程的,有时候网络原因,或页面加载慢。假设搜索框输入框输入了selenium ,搜索按钮还没加载出来,那么脚本就报错。在适当的位置加入time.sleep()有助于减少网络原因造成的脚本执行失败;


others:

在 web 应用中经常会出现 frame/iframe 表单内嵌套的应用,WebDriver只能在一个页面上进行元素识别定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这是需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

多层框架或窗口的定位:

  • switch_to_frame()
  • switch_to_window()

current_window_handle:获得当前窗口句柄

window_handles:返回所有窗口的句柄到当前对话

switch_to.window(窗口句柄):切换到对应的窗口。

由于发表新话题会新窗口打开,所以要指向新窗口,即发话题窗口

handle = driver.current_window_handle
driver.switch_to_frame("topFrame")
driver.find_element_by_id("defaultframe").click()
driver.switch_to_window(handle)

智能等待:

  • implicitly_wait()

对于一个现代的web应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。

有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame中,seelnium  webdriver 提供了一个switch_to_frame方法,可以很轻松的来解决这个问题。

driver.webdriver.remote.webdriver.implicitly_wait(time_to_wait)
隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次
 
driver.switch_to_alert().accept()   # 相当于点击确定,或者使用   driver.execute("acceptAlert")
driver.switch_to_alert().dismiss()  # 相当于点击取消,或者使用   driver.execute("dismissAlert")
driver.switch_to_alert().text           #获取弹出框里的文字  或者使用  driver.execute("getAlertText")["value"]
 
#将页面滚动条拖到底部

js="var q=document.documentElement.scrollTop=10000"

driver.execute_script(js)

time.sleep(3)
#将滚动条移动到页面的顶部

js="var q=document.documentElement.scrollTop=0"

driver.execute_script(js)
要想调用键盘按键操作需要引入keys包:
from selenium.webdriver.common.keys import Keys

通过send_keys()调用按键:

send_keys(Keys.TAB)        # TAB

send_keys(Keys.ENTER)    # 回车

键盘组合键用法:
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
全选、粘贴

Cookies
  • driver.get_cookies() 获得cookie信息
  • add_cookie(cookie_dict)  向cookie添加会话信息
  • delete_cookie(name)   删除特定(部分)的cookie
  • delete_all_cookies()    删除所有cookie
# 获得cookie信息

cookie= driver.get_cookies()

#向cookie的name 和value添加会话信息。

driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})

关于验证码

关于验证码的处理,大致如下:

1、测试时先去掉验证码

2、使用验证码识别技术

3、使用cookies记录登录用户名密码,下次自动登录免去验证码输入环节

4、调用系统接口(测试时使用)获取验证码

5、登录时调用sleep(10),自己手动人工输入。

咸鱼

selenium + python自动化测试(一)的更多相关文章

  1. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  2. selenium+python自动化测试

    F12: 右键   选择复制  path 在selenium+python自动化测试(一)–环境搭建中,运行了一个测试脚本,脚本内容如下: from selenium import webdriver ...

  3. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

    因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...

  4. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  5. selenium+python自动化测试系列(一):登录

        最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重,为了减轻回归测试的工作量,所以考虑后台 ...

  6. selenium + python自动化测试环境搭建

    selenium的在python平台的搭建: 搭建平台windows 准备工具如下: --------------------------------------------------------- ...

  7. selenium + python自动化测试环境搭建--亲测

    环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...

  8. selenium + python自动化测试unittest框架学习(一)selenium原理及应用

    unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...

  9. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  10. Selenium+Python自动化测试环境搭建和搭建过程遇到的问题解决

    环境搭建: 第一步:安装Python  网址:https://www.python.org/ 按照如图提示安装,并且配置环境变量(安装时候选中pip会自动安装Python的包管理工具 pip,推荐选择 ...

随机推荐

  1. windows本地远程虚拟机docker中的数据的问题

    关闭各种防火墙 打开宿主机(windows)的cmd,在其中添加通往192.168.1.0/24网络的路由. 通往192.168.1.0/24网络的数据包由172.20.1.12来转发 route a ...

  2. Linux系统下Mysql安装与配置

    一,使用系统 Centos7: 在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 二,下载安装 ...

  3. Vue echarts

    方式一.直接引入echarts 先 npm 安装 echarts npm install echarts --save // main.js import myCharts from './comm/ ...

  4. Angular 基本内置服务和筛选器

    AngularJS中的内置服务(共30多个): $http 发送http请求,主要用于进行异步数据请求的功能实现,这个服务主要封装了XMLHttpRequest对象和JSONP数据访问模式来完成远程请 ...

  5. PHP用户输入数据进行过滤

    1.在表单中,input项,如果用户输入的是英文状态下的双引号或单引号,数据保存后.以后又在后台编辑的时候,<input value=" "这是带引号的值,因为引号导致问题& ...

  6. MongoDB系列:二、MongoDB常用操作练习

    最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一.背景 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存 ...

  7. python正则匹配示例

    text="山东省临沂市兰山区 市委大院中区21号楼4单元 276002 奥特曼1号 18254998111" #匹配手机号 m=re.findall(r"1\d{10} ...

  8. Go语言中DateTime知识点

    一.基本使用 ①从属于time这个包 ②一般使用都是使用 time.Time 这个类型表示时间 ,time包中还有一些常量,源码如下 // Common durations. There is no ...

  9. LuoguP4233 射命丸文的笔记

    题目描述 求所有\(n\)个点带标号强连通竞赛图中哈密顿回路数量的平均值. 题解 因为要求平均数,所以我们可以把分母和分子单开来算. \(n\)个点的所有竞赛图的所有哈密顿回路个数是可以求出来的,就是 ...

  10. logstash filter 处理json

    根据输入的json字段,分别建立索引.循环生成注册log和登录log保存到testlog文件中,结果如下: {"method":"register"," ...