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的更多相关文章

  1. 转:python webdriver API 之操作测试对象

    一般来说,所有有趣的操作与页面交互都将通过 WebElement 接口,包括上一节中介绍的对象定位,以及本节中需要介绍的常对象操作.webdriver 中比较常用的操作元素的方法有下面几个: cle ...

  2. Webdriver API (二)

    (转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...

  3. selenium2(WebDriver) API

    selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/  1.1  下载selenium2.0的包 官方downl ...

  4. Selenium2+Python:Webdriver API速记手册

    由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和 ...

  5. webdriver API中文文档

    1.1   下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGuide:http://seleniu ...

  6. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  7. Selenium WebDriver Api 知识梳理

    之前一直没有系统的梳理WebDriver Api的相关知识,今天借此机会整理一下. 1.页面元素定位 1.1.8种常用定位方法 # id定位 driver.find_element_by_id() # ...

  8. 2.28 查看webdriver API

    2.28 查看webdriver API(带翻译) 前言    前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就教大家如何去查看seleni ...

  9. 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 ...

  10. Webdriver API中文版

    Webdriver API中文版 1.1   下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGui ...

随机推荐

  1. iOS开发之SceneKit框架--SCNAction.h

    1.SCNAction简介 主要负责节点SCNNode的属性,实现node的渐变.移动.出现.消失.实现动画等. 2.相关API 节点的移动(earthNode的初始坐标(5,0,0)) //从当前位 ...

  2. 实验室系统tomcat 6 java.lang.OutOfMemoryError: Java heap space

    java.lang.OutOfMemoryError: Java heap space

  3. Collection单列集合中的常用实现类

    Collection 集合层次的根接口 List 有序 有索引 可以重复 ArrayList 底层数据结构是数组 查询快 增删快 线程不安全 效率高 LinkedList 底层数据结构是链表 查询慢 ...

  4. django汉化

    汉化admin后台管理站点 修改settings文件(将上表格内容改变为下表格): LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' LANGUAGE_CODE = ...

  5. ajax无刷新上传

    我们在使用上传控件的时候,会遇到刷新的问题,最近使用ajax做的上传,觉得效果还是很不错. 首先,我们需要在页面上放上上传控件:需要注意的是,我们必须放在form里面,实现表单上传.  <for ...

  6. sparkStreaming入门

    1.环境 jdk : 1.8 scala : 2.11.7 hadoop:2.7 spark : 2.2.0 2. 开发工具 idea 2017.2 3.maven的pom文件 <depende ...

  7. iOS开发系列-文件下载

    小文件下载 NSURLConnection下载小文件 #import "ViewController.h" @interface ViewController ()<NSUR ...

  8. (转)FastCgi与PHP-fpm之间是个什么样的关系

    首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  9. [CF587-F]WI-FI

    显然DP题... f[i][0]表示这个点不装路由器,f[i][1]表示装路由器 转移也很简单,在前面一段区间找最小值就好了 但是直接转移是$O(n*k)$的,会T掉 大佬说这个东西有单调性,但是菜鸡 ...

  10. Angular 监听滚动条事件

    一.引用fromEvent import { fromEvent } from 'rxjs'; 二.调用fromEvent this.subscribeScoll = fromEvent(window ...