Selenium 笔记
1、 截屏:get_screenshot_as_file(“C:\\b1.jpg”)
2、 退出:(1).close----关闭当前窗口
(2).quit()-----用于结束进程,关闭所有的窗口
一、八大元素定位
3、查看页面元素(八中元素熟悉的元素定位,经常会用到)
1)、id定位:find_element_by_id()
2)、name定位:find_element_by_name()
3)、class定位:find_element_by_class_name()
4)、tag定位:find_element_by_tag_name()
5)、link定位:find_element_by_link_text()
6)、partial_lick定位:find_element_by_partial_link_text() 局部链接lick元素
7)、xpath定位:find_element_by_xpath xpath为路径语言,跟上面的定位原理不太一样
8) 、css定位:find_element_by_css_selector
4、这八种是复数形式
1)id复数定位:find_element_by-id(self,id)
2)name复数定位:find_element_by_name(self,name)
3)class复数定位:find_element_by_class_name(self,name)
4)tag复数定位:find_element_by_tag_name(self,name)
5)lick复数定位:find_element_by_link_text(self,text)
6)partial_lick复数定位:find_element_by_partial_lick_text(self,link_text)
7)xpath复数定位:find_element_by_xpath(self,xpath)
8)css复数定位:
这两种参数滑方法,对上面8中的总结
1、 find_element(self,by=’id’,value=None)
2、 find_element(self,by=’id’,value=None)
发送文字”python”:send_keys(‘python’)
二、submit()提交订单表单
如:driver_.find_element_by_id(“kw”).submit()
三、键盘操作
2、模拟键盘的操作需要先导入键盘模块:from selenium.webdriver.common.keys import Keys
3、模拟enter键:send_keys(Keys.ENTER); 其他复制粘贴类似。
如:复制Ctrl+C:send_keys(Keys.CONTROL,’c’)
四、鼠标悬停事件
鼠标事件需要先导入模块:
from selenium.webdriver.common.action_chains import ActionChains
perform()执行所有ActionChians中的行为
move_to_element() 鼠标悬停
除了常用的鼠标悬停事件,还有
右键:context_click()
双击:double_click()
五、多窗口、句柄(handle)
获取当前页面的句柄:driver.current_window_handle
获取所有的窗口的句柄:window_handles
方法1:判断句柄,不等于当前首页就切换
方法2:获取list里面第二个直接切换
切换窗口:driver.switch_to.window(h)
六、定位一组元素find_elements
Webdriver提供了定位一组元素的方法,跟前面八种定位其实一样,只是前面是单数,这里是复数形式:find_elements
七、随机函数
1、搜索结果有10条,从10条中随机取一个就ok了
2、先导入随机函数:import random
3、设置随机值范围为0~9:a=random.randint(0,9)
八、iframe
Frame 与iframe两者可以实现的功能基本相同,不过iframe比Frame居于更多的灵活型。Frame是整个页面的框架,iframe是内嵌的页面元素。也可以说是内嵌的框架。
Iframe标记又叫发动帧标记,可以用它将一个HTML文档嵌入的<iframe></iframe>所包含的内容与整个页面是一个整体,而<Frame></Frame>所包含的内容时一个独立的个体,时可以独立显示的,另外,应用iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内容的代码。简单点如下:
< Frame >
<iframe>
</iframe>
</ Frame >
九、切换iframe
1、由于登陆按钮时在iframe上,所以第一步需要把定位器切换到iframe上
2、用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换
3、 如果iframe没有id(使用其他八大元素定位同样适用---如上图为tag先定位)
4、 释放iiframe
5、 1、iframe上操作后,想重新回到主页面上操作元素,
使用switch_to_default_context()返回到主页面
6、 确认iframe是否在iframe上的方法
(1) 定位到元素后,切换到firepath界面
(2) 看firebug工具左上角,如果显示Top Window说明没有iframe
(3) 如果显示iframe#xxx这样,说明iframe上,#后面就是他的id
7、 switch_to_frame上的横线
python的脚本上面划奕横线,是说这个语法已经过时了(也可以继续用)。
8、 帮助文档使用
(1) 查看更多的api用法,可以查看官网帮助文档,也可以通过一下方式在本地查看:
Dos窗口输入:python -m pydoc -p4567,如下图,待 server启动后。
然后再浏览器打开:http://localhost:4567/
代码如下:
#coding:utf-8
From selenium import webdriver
Driver=webdriver.Firefox()
Driver.get(“http://mail.163.com/”)
Driver.implicitly_wait(30)
#切换iframe
#iframe=driver.find_element_by_tag_name(“iframe”)
#driver.switch_to_frame(iframe)
#driver.switch_to_frame(“x-URS-iframe”)
Driver.switch_to.frame(“x-URS-iframe”)
Driver.find_element_by_name(“email”).send_keys(“123”)
Driver.find_element_by_name(“password”).send_keys(“456”)
#释放iframe,重新回到主页面上
Driver.switch_to.default_content()
九、select(选项)
1、定位select里的选项有多种方式,(1)二次定位
Select模块(index)
1、 导入select方法:
From selenium.webdriver.suport.select import Select
2、 然后通过select选项的索引来定位选择对应选项(从0开始计数),如选择第三个选项:select_by_index(2)
3、 通过选项的value值来定位。每个选项都有相应的value值,如
3、Select定位(text)
4、select模块的其他方法
Select_by_index():通过索引定位
Select_by_value():通过value值定位
Select_by_visible_text():通过文本值定位
Deselect_all():取消所有选项
Deselect_by_index():取消对index值
Deselect_by_value()::取消对应value值
Deselect_by_visible_text():取消对用文本选项
Frist_select_option():返回第一个选项
All_selected_option():返回所有的的选项
十、alert操作
1、先用switch_to_aleert()方法切换到alert弹出框上
2、用text方法获取弹出文本信息
3、accept()点击确认按钮
4、dismiss()相当于点右上角x,取消弹出框(url的路径,直接复制浏览器打开的路径)
Select遇到的坎
(1) 在操作百度设置里面,点击“保存设置”按钮,alert弹出框没有弹出来。
(2) 原因:经过后面发现,在点击“保存设置”按钮时,由于前面select操作后,失去了焦点
(3) 解决:在slect操作后,做个click()点击操作
十一、单选框和复选框(radiobox、checkbox)
注意:单选框是圆的;复选框是方的
下为单选:
全选:定位同一组元素,从上面源码可以看出,复选框的type=checkbox,,0这里可以用xpath语法:.//*[@type=’checkbox’]
注意:find_elements是不能直接点击的,他是复数,所以只能先取得所有的checkbox对象,然后使用for循环去一个个点击操作
判断是否选中:is_selected()
十二、启动配置文件
1、 由于文件路径存在字符:\,反斜杠在代码里是转义字符
2、 遇到转义字符,为了不让转义,两种处理方式:
第一种:\(前面再加一个反斜杠)
第二种:r“\”(字符串前面佳r,使用字符串原型)
十三、文件上传(send_keys)
文件上传是web页面上常见的一个功能,哟个脚本区实现上传不是那么简单。
一般分为两个场景:
A、一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决;
B、另一种是非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库
1、识别上传按钮
一般有些可以直接firebug查看按钮属性,像图片这种上传有个很明显的标识,它是input标签,并且type属性的值为file
只要这两个标识,即可直接用send_keys()方法上传文件
十四、cookie相关操作
1、 获取cookies:get_cookies()
先启动浏览器,获取cookies,打印出来发现是空的
打开被测系统首页,冲洗获取cookies,打印出来具有值了
2、 获取指定【name的cookie:driver.get_cookie(name)
① 获取cookies发现有多个cookies的name值就可以了,比如的:.CNBlogsCookie
3、 清除指cookies:delete_cookies
4、 Delete_all_cookies():清除所有的cookies
5、 And_cookies(cookies_dict):添加cookies的值
6、 (第五个方法可以用于绕过验证码是,下面详细学习)
验证码这种问题比较头痛的,对于验证码的处理,不要去向破解方法,这个验证码安全级别不高,那需要提高级别了
另外对于验证码,要么是让开发再测试环境弄个万能的验证码,如:12345,要么就是尽量绕过去
十五、fiddler抓包
1、 前面是,登陆后生成一个已登陆状态的cookies,那么只有需要直接把这个添加cookies里面即可
2、 这是可以使用手动登陆一次,然后抓取这个cookie,这里就需要抓包工具fiddler
3、 打开博客园登陆界面,手动输入账号和密码(不要点登陆按钮)
4、 登陆后,再看cookies变化,发现多了两组参数,多的这两组参数就是我想要的,copy出来
5、 先登录我的博客首页:https://www.cnblogs.com/czb4256/ ,没有进入到登陆主页面
添加coookie后刷新页面,接下就是见证奇迹的时刻了。
一、Js控制滚动条高度
1、滚动条回到顶部:
Js=”var q=document.getElementById(‘id’).scrollTop=0”
Driver.execute_script(js)
2、拉滚动条到底部
Js=“var q=document.documentElement.scrollTop=10000”
Driver.execute_script(js)
3、这里可以修改scrollTop的值,来定位右侧滚动条的位置,0是最上面,10000是最低部
4、横向滚动条
①有时候浏览器页面需要左右滚动条(一般屏幕最大化后,左右滚动条的情况已经很少见)
②通过左边控制横向和纵向滚动条scrollTo(x,y)
js=”window.scrollTo(100,400);”
driver.execute_script(js)
元素聚焦
1、虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需 要操作的元素 在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办 呢?
2、这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同 样需要借助 JS 去实现。
3、元素聚焦:
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)
scrollTo函数
scrollTo函数不存在兼容性问题,直接用这个函数即可
----scrollToHeight 获取对象的滚动高度。
----scrollToLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
-----scrollToTop 设置或获取位于对象最顶部和窗口中可见内容的最顶端之间的距离
-----scrollToWidth 获取对象的滚动宽度
#滚动到底部
Js=“window.scrollTo(0,document.body.scrollHeight)”
Driver.execute_script(js)
日历控件
1、 打开12306的车票查询界面,再出发日期输入无法直接输入时间
2、 常规思路是点开日历控件弹出框,从日历控件上点日期,这样操作比较烦躁。并且测试不是在日历控件上,只是输入个时间,做下一步的操作
3、 用firebug查看输入框的属性:readonly=“readonly“。如下:
<input id="train_date" class="input" type="text" readonly="" value="2018-07-21">
Webdriver aip
1、查看文档
打开cmd 命令行,输入:python -m pydoc -p 6666
-p参数:表示再本机上启动服务
6666参数:这是服务端口号,随意设置
打开后,界面会出现一个网站:http://localhost:6666/,再浏览器直接打开
2、浏览器查看文档
①在浏览器输入:http;//localhost:6666/
②Built-in Moudles:这个是python自带的模块
Selenium 笔记的更多相关文章
- selenium笔记(1)
selenium笔记(1) 一.关闭页面:1.driver.close() 关闭当前页面2.driver.quit() 退出整个浏览器 二.定位元素:1.find_element_by_id: 根据i ...
- Python+Selenium笔记(九):操作警告和弹出框
#之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用) 改成 driver.switch_to.alert就不会了. (一 ...
- Python+Selenium笔记(一):环境配置+简单的例子
#环境配置基于windows操作系统 #学习selenium要有一些HTML和xpth的基础,完全不会的建议先花点时间学点基础(不然元素定位,特别是xpth可能看的有点懵) #HTML : http ...
- Python+Selenium笔记(十八):持续集成jenkins
(一)安装xmlrunner 使用Jenkins执行测试时,测试代码中会用到这个模块. pip install xmlrunner (二)安装jenkins (1) 下载jekins https: ...
- Python+Selenium笔记(十七):操作cookie
(一)方法 方法 简单说明 add_cookie(cookie_dict) 在当前会话中添加cookie信息 cookie_dict:字典,name和value是必须的 delete_all_cook ...
- Python+Selenium笔记(十六)屏幕截图
(一) 方法 方法 简单说明 save_screenshot(filename) 获取当前屏幕截图并保存为指定文件 filename:路径/文件名 get_screenshot_as_base64 ...
- Python+Selenium笔记(十五)调用JS
(一) 方法 方法 简单说明 execute_async_script(script, args) 异步执行JS代码 script:被执行的JS代码 args:js代码中的任意参数 execute_s ...
- Python+Selenium笔记(十四)鼠标与键盘事件
(一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...
- Python+Selenium笔记(十三):Page Object设计模式
(一) 前言 简单的说就是分为2层,页面class 和测试class. 页面class:分为父类和子类(子类指具体的页面,每一个页面都创建一个类),父类中定义公有的属性和方法(操作). #对面向对象有 ...
随机推荐
- 01python语言程序设计基础——初识python
1.python的字符串中format函数用法 format 函数可以接受不限个参数,位置可以不按顺序. In [2]: "{} {}".format("hello& ...
- day054 组件 CBV FBV 装饰器 ORM增删改查
组件: 把一小段HTML 放在一个HTML中 nav.html 使用: {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...
- Windows不要使用记事本编辑文本文件
摘自:廖雪峰 千万不要使用Windows自带的记事本编辑任何文本文件.原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0x ...
- 刘志梅2017710101152.《面向对象程序设计(java)》第一周学习总结
本人学号<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com http://ww ...
- (转)SqlServer2008 数据库同步:发布、订阅
原文地址:http://www.cnblogs.com/tyb1222/archive/2011/05/31/2064944.html 发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器 ...
- Android 开发 创建WiFi、WiFi热点 ---开发集合
WIFI 权限 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> < ...
- centOS7安装kafka和zookeeper
wget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz tar zxvf kafka_2.-.tgz cd ka ...
- npm下载安装文件太慢..修改这个就好了..治好多年的便秘..真香预警
修改 npm 的安装目录下的 npmrc文件 增加一条 registry=http://registry.cnpmjs.org 将原来的https改成下面的http $ npm config set ...
- C#设计模式(4)——抽象工厂模式(Abstract Factory)
简单工厂模式: 简单工厂模式的工厂类随着产品类的增加需要增加额外的代码 工厂方法模式: 工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性 但是在实际应用中,一个工厂不止会创建单 ...
- Swift 通过运行时获取属性名列表
import UIKit //必须要有@objcMembers修饰符,否则获取到的成员属性为0 @objcMembers class Person: NSObject { var name: Stri ...