015-WebDriver API
1. 从定位元素开始
8种元素定位方法
id
find_element_by_id( )
name
find_element_by_name( )
tag
find_element_by_tag_name( )
class
find_element_by_class_name( )
link_text
find_element_by_link_text( )
partial_link
find_element_by_partial_link_text( )
XPath
find_element_by_xpath( )
CSS_selector
find_element_by_css_selector( )
关于selenium元素定位如何验证属性的唯一性
快捷键F12,切换到Console,按下快捷键crtl+L:清空console内容
在console的输入栏,用Css的语法$$(“标签[属性='属性值']”)
在console的输入栏,用Xpath的语法$x("//*[@属性='属性值']")

length:1-->表示元素的属性对应的属性值是唯一的
length:2-->表示元素的属性对应的属性值不唯一
XPath 定位
1. 绝对路径定位
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
2. 利用元素属性定位
使用元素的属性来定位,//input表示当前页面某个input标签
find_element_by_xpath("//input[@id='kw']")
如果不想指定标签名,可以使用星号(*)代替
find_element_by_xpath("//*[@id='kw']")
使用xpath不局限于id、name、和class这三个属性,元素的任意属性都可以使用,只要它能唯一标识一个元素
find_element_by_xpath("//input[@autocomplete='off']")
find_element_by_xpath("//input[@type='submit']")
3. 层级与属性结合
如果一个元素本身没有可以唯一标识这个元素的属性,那么我们可以查找上一级元素。如果它的上一级元素有可以唯一标识属性的值,可以拿来使用
find_element_by_xpath("//form[@id='form']/span/input")
4. 使用逻辑运算符
如果一个属性不能唯一区分一个元素,那么我们可以使用逻辑运算符连接多个属性来查找元素
find_element_by_xpath("//input[@id='kw'and @class='s_ipt']")
CSS定位
1. 通过class定位
点号(.)表示通过class来定位元素
find_element_by_css_selector(".s_ipt")
2. 通过id定位
井号(#)表示通过id来定位元素
driver.find_element_by_css_selector("#kw")
3. 通过属性定位
在CSS中可以使用元素的任意属性定位,只要这些属性可以唯一标识这个元素
driver.find_element_by_css_selector("[name ='wd']")
driver.find_element_by_css_selector("[autocomplete='off']")
4. 通过标签名定位
在CSS中,用标签名定位元素时不需要任何符号标识,直接使用标签名即可
find_element_by_css_selector("input")
5. 通过标签层级关系定位
这种写法表示有父元素,父元素的标签名为span。查找span中所有标签名为input的子元素
find_element_by_css_selector("span > input")
6. 组合定位
把上面的定位策略组合起来使用,大大加强了定位元素的唯一性
driver.find_element_by_css_selector("form.fm > span > input#su").click()
7. 更多定位用法
find_element_by_css_selector("[class*=s_ipt_wr]")
查找class属性包含“s_ipt_wr”字符串的元素
find_element_by_css_selector("[class^=bg]")
查找class属性中以“bg”字符串开头的元素
find_element_by_css_selector("[class$=wrap]")
查找class属性中以“wrp”字符串结尾的元素
find_element_by_css_selector("form > input:nth-child(2)")
查找form标签下面第2个input标签的元素
用By元素定位
使用By之前需要先导入
from selenium.webdriver.common.by import By
WebDriver 还提供了find_element( )方法定位元素,它需要两个参数。第一个参数是定位类型,由By提供;第二个参数是定位的值
driver.find_element(By.ID, "kw").send_keys("selenium")
driver.find_element(By.NAME, "wd").send_keys("selenium")
driver.find_element(By.CLASS_NAME, "s_ipt").send_keys("selenium")
driver.find_element(By.TAG_NAME, "input")
driver.find_element(By.LINK_TEXT, "新闻")
driver.find_element(By.PARTIAL_LINK_TEXT, "新")
driver.find_element(By.XPATH, "//input[@name = 'wd']").send_keys("selenium")
driver.find_element(By.CSS_SELECTOR, ".s_ipt").send_keys("selenium")
2. 控制浏览器
设置窗口大小
driver.set_window_size(400,800)
设置全屏
driver.maximize_window()
后退
driver.back()
前进
driver.forward()
刷新
driver.refresh()
3. webdrdiver中的常用方法
1. clear( )
清除文本
2. send_keys(value)
模拟按键输入
3. click( )
单击元素
4. submit( )
提交表单
有些输入框不提供搜索按钮,而是通过键盘上的回车键完成搜索内容的提交,这是我们可以使用submit模拟
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_text = driver.find_element_by_id("kw")
search_text.send_keys("selenium")
# 提交
search_text.submit()
5. size
返回元素的尺寸
6. text
获取元素的文本
7. get_attribute(name)
获取属性值
8. is_displayed( )
设置该元素是否用户可见
4. 鼠标操作
ActionChains
引入ActionChains类
from selenium.webdriver import ActionChains
ActionChains 提供的方法
click(on_element=None) #单击鼠标左键
click_and_hold(on_element=None) #点击鼠标左键,按住不放
context_click(on_element=None) #点击鼠标右键
double_click(on_element=None) #双击鼠标左键
drag_and_drop(source, target) #拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) #拖拽到某个坐标然后松开
move_by_offset(xoffset, yoffset) #鼠标移动到距离当前位置(x,y)
move_to_element(to_element) #鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) #将鼠标移动到距某个元素多少距离的位置
release(on_element=None) #在某个元素位置松开鼠标左键
perform() #执行链中的所有动作
move_to_element( ):鼠标悬停
from selenium import webdriver
from selenium.webdriver import ActionChains driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
above = driver.find_element_by_link_text("设置")
action = ActionChains(driver)
# 对定位到的元素进行鼠标悬停操作
action.move_to_element(above).perform()
TouchActions
引入TouchActions类
from selenium.webdriver.common.touch_actions import TouchActions
TouchAction提供的方法
double_tap(on_element) #双击
flick_element(on_element, xoffset, yoffset, speed) #从元素开始以指定的速度移动
long_press(on_element) #长按不释放
move(xcoord, ycoord) #移动到指定的位置
perform() #执行链中的所有动作
release(xcoord, ycoord) #在某个位置松开操作
scroll(xoffset, yoffset) #滚动到某个位置
scroll_from_element(on_element, xoffset, yoffset) #从某元素开始滚动到某个位置
tap(on_element) #单击
tap_and_hold(xcoord, ycoord) #某点按住
5. 键盘操作
导入Keys类
from selenium.webdriver.common.keys import Keys
常用键盘操作
send_keys(Keys.BACK_SPACE):删除键
send_keys(Keys.SPACE):空格键
send_keys(Keys.ESCAPE):回退键
send_keys(Keys.ENTER):回车键
send_keys(Keys.CONTROL, "a"):全选
send_keys(Keys.CONTROL, "c"):复制
send_keys(Keys.CONTROL, "x"):剪切
send_keys(Keys.CONTROL, "v"):粘贴
6. 常用的几种验证信息
title:用于获取当前页面的标题
current_url:用于获取当前页面的URL
text:用于获取当前页面的文本信息
一百度搜索为例,对比搜索前后的信息差异,这些差异信息可以拿来作为自动化测试的断言点
7.设置元素等待
1. 显示等待WebDriver,具体格式如下:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exception=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔(步长)时间,默认为0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
WebDriverWait()一般与until()或until_not()方法配合使用
presence_of_element_located() 判断元素是否存在,由 expected_conditions 类提供
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 driver = webdriver.Chrome()
driver.get("http://www.baidu.com") try:
element = WebDriverWait(driver, 2, 0.5).until(EC.presence_of_element_located((By.ID, '1kw')))
element.send_keys('selenium')
finally:
driver.quit()
2. 使用is_displayed( )方法实现元素显示等待
from time import sleep,ctime
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://www.baidu.com") print(ctime()) for i in range(5):
try:
e1 = driver.find_element_by_id("kw12")
if e1.is_displayed():
break
except:
sleep(1)
else:
print("time out") print(ctime())
driver.quit()
3.隐式等待implictily_wait()
from time import ctime
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("http://www.baidu.com")
try:
print(ctime())
driver.find_element_by_id("kw123").send_keys("selenium")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
4.三种等待方式的区别:
1.selenium的显示等待
原理:显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.(简而言之:就是直到元素出现才去操作,如果超时则报异常)
2.selenium的隐式等待
原理:隐式等待,就是在创建driver时,为浏览器对象设置一个等待时间。这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内不断的刷新页面去寻找我们需要的元素
3.sleep()等待
使当前线程进入等待,如果使用Thread.sleep()方法,这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以我们要慎用此方法
8. 定位一组元素
8种定位一组元素的方法
find_elements_by_id( )
find_elements_by_name( )
find_elements_by_tag_name( )
find_elements_by_class_name( )
find_elements_by_link_text( )
find_elements_by_partial_link_text( )
find_elements_by_xpath( )
find_elements_by_css_selector( )
015-WebDriver API的更多相关文章
- 转: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界面的可 ...
- Selenium WebDriver Api 知识梳理
之前一直没有系统的梳理WebDriver Api的相关知识,今天借此机会整理一下. 1.页面元素定位 1.1.8种常用定位方法 # id定位 driver.find_element_by_id() # ...
- 2.28 查看webdriver API
2.28 查看webdriver API(带翻译) 前言 前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就教大家如何去查看seleni ...
- python2.7运行selenium webdriver api报错Unable to find a matching set of capabilities
在火狐浏览器33版本,python2.7运行selenium webdriver api报错:SessionNotCreatedException: Message: Unable to find a ...
- Webdriver API中文版
Webdriver API中文版 1.1 下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGui ...
随机推荐
- JAVA 设计模式之 原型模式详解
原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式利用的是克隆的原理,创建新的对象,JDK提供的Cloneable 和JSON. ...
- c++中变量、变量名、变量地址、指针、引用等含义
首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5...... 房间里面一定要住人,新人住进去了,原来的人就走了:不管你住不住,里面都有人. 编号就是地址.里面的人就是内容,为了我们 ...
- Spring中AOP的实现
Spring中整合了AOP的功能,虽然有不足,没有专门做AOP框架的那么完美,但是用一用感觉还是不错的 一些概念: AOP 面向切面编程 aspect 切面/切面类(我个人认为一个真正被解耦的程序,切 ...
- <day004>小娜显示空白+CSV文件的基本操作+普通的代理使用
小知识: 当小娜搜索显示空白的时候,怎么解决? 任务管理器结束小娜进程就好了= =*(多半是惯得,关掉就好了!) 任务1:CSV文件的基本操作 import csv import pandas as ...
- LeetCode 19.删除链表的倒数第N个节点(Python)
题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点 ...
- 模拟实现call、apply
1. 知识点补充: 首先在模拟实现前,先Mark一些我之前不知道的知识: a. eval(string)函数:可计算某个字符串,并执行其中的JavaScript代码 其中,string是必需传入的待计 ...
- [violet6] 故乡的梦
题目 描述 不知每日疲于在城市的水泥森林里奔波的你会不会有时也曾向往过乡村的生活.你会不会幻想过,在夏日一个静谧的午后,你沉睡于乡间路边的树荫里,一片叶子落在了你的肩上, 而你正做着一个悠长的梦,一个 ...
- 日志服务Python消费组实战(二):实时分发数据
场景目标 使用日志服务的Web-tracking.logtail(文件极简).syslog等收集上来的日志经常存在各种各样的格式,我们需要针对特定的日志(例如topic)进行一定的分发到特定的logs ...
- Android基础控件ScrollView滚动条的使用
1.简介 ScrollView是一个FrameLayout的容器,不过在他的基础上添加了滚动,允许显示的比实际多的内容!另外,只能够往里面放置一个子元素,可以是单一的组件,又或者一个布局包裹着的复杂的 ...
- 反编译之jd-gui的安装
1.下载JD-GUI http://jd.benow.ca/ 2.下载的dmg安装一直失败 通过brew(https://brew.sh/index_zh-cn.html)命令安装 brew cas ...