Webdriver API之操作(一)
一. 控制浏览器
1. 控制浏览器大小
driver.set_window_size(480,800) #浏览器宽480,高800显示
dirver.maximize_window() #浏览器最大化显示
2. 后退、前进
driver.back()
driver.forward()
3. 浏览器刷新(F5)
driver.refresh()
二、 简单元素操作:find_element_by_id("xx").+ ?
clear() 清除文本
send_keys(*value) 模拟按键输入
click() 单击元素
size 返回元素的尺寸
text 获取元素的文本
get_attribute(name) 获取name的属性值
is_displayed() 该元素是否可见
三、 鼠标操作
关于鼠标操作的方法封装在ActionChains类中,所以要引用这个类
perform() 执行所有ActionChains种存储的行为
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停
from selenium import webdriver #引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("http://yunpan.360.cn")
#定位到要右击的元素
right_click =driver.find_element_by_id("xx")
#对定位到的元素执行鼠标右键操作,调用ActionChains()类,将驱动driver作为参数传入
ActionChains(driver).context_click(right_click).perform()
鼠标右击操作
# ====同上,定位要悬停的元素
above = driver.find_element_by_id("id")
# 对元素执行悬停操作
ActionChains(driver).move_to_element(above).perform()
鼠标悬停
# ====同上,定位要双击元素
double_click = driver.find_element_by_id("id")
# 对元素执行双击操作
ActionChains(driver).double_click(double_click).perform()
双击操作
#===同上,定位元素的原位置
element = driver.find_element_by_id("id") # 定位元素要移动到的目标位置
target = driver.find_element_by_id("xx") # 执行元素的拖放操作
ActionChains(driver).drag_and_drop(element,target).perform()
鼠标拖放操作
四、 键盘事件
…… #coding=utf-8
from selenium import webdriver
#引入Keys模块
from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://www.baidu.com") #输入框输入内容 driver.find_element_by_id("kw").send_keys("seleniumm") #删除多输入的一个m driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) #输入空格键+“教程” driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"教程") #ctrl+a 全选输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') #ctrl+x 剪切输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') #ctrl+v 粘贴内容到输入框 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') #通过回车键盘来代替点击操作 driver.find_element_by_id("su").send_keys(Keys.ENTER) driver.quit()
键盘事件示例
fromselenium.webdriver.common.keys importKeys
在使用键盘按键方法前需要先导入 keys 类包。
下面经常使用到的键盘操作:
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
五. 获得验证信息(titile、URL、TEXT)
driver.titile # 获取当前页面title
driver.current_url # 获取当前页面URL
driver.find_element_by_id("kw").text #获取当前元素的文本
六. 设置元素等待
1. 显式等待
使webdriver等待某个条件成立时继续执行,即默认每隔一段时间检测一次until True,否则在达到最大时长抛出超时异常(TimeoutException)
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #导入EC driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 超时时间5s内,检测间隔0.5S,直到“kw”元素存在,超时不存在抛出异常
element = WebDriverWait(driver,5,0.5).until( EC.presence_of_element_located((By.ID,"kw")) ) element.send_keys('selenium') driver.quit()
显式等待示例
在本例中,我们在使用 expected_conditions 类时对其时行了重命名,通过 as 关键字对其重命名为 EC, 并调用 presence_of_element_located()判断元素是否存在。
详情请看下面:
WebDriverWait类是由WebDriver提供的等待方法,
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until()
driver - WebDriver 的驱动程序(Ie, Firefox,Chrome 等)
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
until()
WebDriverWait()一般由 until()(或 until_not())方法配合使用,下面是 until()和 until_not()方法的说明。
until(method,message=’’)
调用该方法提供的驱动程序作为一个参数,直到返回值为 Ture。
until_not(method,message=’’)
调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
expected_conditions 类提供一些预期条件的实现:
title_is 用于判断标题是否 xx。
title_contains 用于判断标题是否包含 xx 信息。
presence_of_element_located 元素是否存在。
visibility_of_element_located 元素是否可见。
visibility_of 是否可见
presence_of_all_elements_located 判断一组元素的是否存在
text_to_be_present_in_element 判断元素是否有 xx 文本信息
text_to_be_present_in_element_value 判断元素值是否有 xx 文本信息
frame_to_be_available_and_switch_to_it 表单是否可用,并切换到该表单。
invisibility_of_element_located 判断元素是否隐藏
element_to_be_clickable 判断元素是否点击,它处于可见和启动状态
staleness_of 等到一个元素不再是依附于 DOM。
element_to_be_selected 被选中的元素。
element_located_to_be_selected 一个期望的元素位于被选中。
element_selection_state_to_be 一个期望检查如果给定的元素被选中。
element_located_selection_state_to_be 期望找到一个元素并检查是否选择状态
alert_is_present 预期一个警告信息
2. 隐式等待
隐式等待式通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。
Webdriver提供了implicitly_wait()方法来实现。它不针对页面上的某一元素进行等待,轮询的方式不断地判断元素是否被定位到。
driver.implicitly_wait(10) 默认秒为单位
3. sleep休眠方式
由Python的time模块提供,默认秒为单位
sleep(2)
七、多表单切换
在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,webdriver只能在一个页面上对元素识别与定位,所以需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。
最后可以通过switch_to.parent_content()方法跳出当前一级表单——对应离它最近的switch_to.frame()方法。
切换iframe方法如下:
1. switch_to.frame()默认可以直接取表单的id或name属性:
#切换到iframe(id = "if")
driver.switch_to_frame("if") #切换到iframe(name = "nf")
driver.switch_to_frame("nf")
2. 如果ifame没有可用的id和name属性,则可以通过下面的方式进行定位。
#先通过xpth定位到iframe
xf = driver.find_element_by_xpath('//*[@class="if"]') #再将定位对象传给switch_to_frame()方法 driver.switch_to_frame(xf)
……
driver.switch_to_default_content()
八、 多窗口切换
Webdriver提供了switch_to.window()方法,可实现两个窗口之间的切换。
#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) driver.get("http://www.baidu.com") #获得百度搜索窗口句柄
sreach_windows= driver.current_window_handle driver.find_element_by_link_text(u"立即注册").click() #获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
#进入注册窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to_window(handle)
print '注册窗口!'
#……
#进入搜索窗口
for handle in all_handles:
if handle == sreach_windows:
driver.switch_to_window(handle)
print '搜索窗口!' driver.quit()
多窗口切换
window_handles:返回所有窗口的句柄到当前会话
current_window_handle:获得当前窗口句柄
switch_to.window():用于切换到相应的窗口
九、警告框处理
处理JavaScript所声称的alert、confirm以及prompt十分简单,使用switch_to_alert()方法定位到alert、confirm以及prompt;
然后使用以下方法进行操作:
text:返回alert、confirm以及prompt中的文字信息
accept():接受现有的警告框
dismiss():解散现有警告框
send_keys(KeyToSend):发送文本至警告框。
例:
driver.switch_to_alert().accept()
Webdriver API之操作(一)的更多相关文章
- Webdriver API之操作(二)
一.窗口截图 dirver.get_screenshot_as_file("D:\\report\\image\\xxx.jpg") 二.关闭窗口 dirver.close() # ...
- WebDriver API——延时操作及元素等待
在自动化测试过程当中,受网络.测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作. 一般有这么几种方式: 1.implicitlyWait.识别对象 ...
- WebDriver API——javascript的相关操作
有些时候webdriver是没法操作元素或浏览器的,这时候我们可以通过javascript来进行相关的操作,昨天在群里一个朋友定位一个显示框,总是无法定位点击,或者是点击无效,这个时候就可以用java ...
- 转:python webdriver API 之操作测试对象
一般来说,所有有趣的操作与页面交互都将通过 WebElement 接口,包括上一节中介绍的对象定位,以及本节中需要介绍的常对象操作.webdriver 中比较常用的操作元素的方法有下面几个: cle ...
- Webdriver API (二)
(转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...
- selenium2(WebDriver) API
selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/ 1.1 下载selenium2.0的包 官方downl ...
- Selenium2+Python:Webdriver API速记手册
由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和 ...
- webdriver API中文文档
1.1 下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGuide:http://seleniu ...
- python+selenium自动化软件测试(第2章):WebDriver API
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...
随机推荐
- 第十四篇 SQL游标、函数的使用方法
游标的的使用有日常的开发和维护的过程不使用的并不多,但是碰到一些棘手的问题的时候,游标时常是个非常好的帮手,下面就说下游标的使用方法,方法自己以后查阅,和加深一些印象,下面以一个存储过程为例 ...
- 如何快速的学习selenium工具
分享即快乐. 最近几年,软件测试工程师一度成为热门职业,作为测试员也是倍感压力.作为测试员来说,仅仅会手工测试让职业生涯陷入瓶颈.于是工作之余充电,学习了自动化测试工具selenium,打算进阶中高级 ...
- JAVA开发环境搭建 - Eclipse基本配置
Eclipse设置的内容包括许多方面,不同的开发人员,不同的项目需要,可能对Eclipse的设置不尽相同.如下内容仅是对本人的一些基本设置做一些记录,以作备忘.后期会逐渐对相关内容进行更新,仅供参考. ...
- AR入门系列-04-vuforia识别多个图片及同屏展示
首先,我们需要在官网中识别数据库添加多张图片,并将数据库下载下来覆盖原来的数据库 在 Hierarchy视图中需要多个ImageTarget 将新建的ImageTarget(1) 选择数据库中的识别图 ...
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
- C/C++ char数组存储字符串内存地址
问题描述: #include <stdio.h> int main(void) { //program 6.3 Arrays of strings ][]; ;i<;++i){ ;j ...
- selenium 运行之后错误提示Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output
错误提示: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port ...
- js小动画算法
function step(A,B,rate,callback){ A = A + (B - A) / (rate || 2); if(Math.abs(A-B) < 1){ callback( ...
- Bzoj超级经验大放送题集(好评如潮哦~~~)
其实这些是因为没有数据才形成的...唯一可惜的是这些都是需要300软妹币才能打开的萌萌哒权限题*^_^* 好啦,吾来教你如何快速AC么么哒 pascal: 1 begin end. //Pascal ...
- OpenStack/devstack with Neutron on Ubuntu 14 (1)
安装前,推荐安装一个全新的Ubuntu Server14.04,如果使用之前的ubuntu, 中间可能遇到各种的python包依赖,以及软件版本不对应的问题 环境准备,新建stack用户,给予sudo ...