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框架--SCNNode.h

    1.SCNNode简介 SCNNode是场景图的结构元素,表示3D坐标空间中的位置和变换,您可以将模型,灯光,相机或其他可显示内容附加到该元素.也可以对其做动画. 2.相关API简介 初始化方法 // ...

  2. 第十九篇:Mysql两次Group by和ip转数字作比较的一次优化

    业务场景:两张表,ipconfig_group表存了单位和 ip 起始段信息 visit_info表存储了访问次数,失败次数,访问流量,用户ip等信息 两张表的关系为:    一个部门下有若干ip段, ...

  3. python基础语法(数据类型转换)

  4. 我擦,DELPHI写个浏览器竟然这么容易,我只加了3个控件,写了3句代码。

  5. LeetCode 19.删除链表的倒数第N个节点(Python)

    题目:    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点 ...

  6. JS获取url参数,修改url参数

    function getURL(){ var args = {}; var query = location.search.substring(1); //获得了当前链接的中?号后的参数 var pa ...

  7. springboot2.0 使用aop实现PageHelper分页

    参考: https://blog.csdn.net/qq_24076135/article/details/85212081 https://www.jianshu.com/p/036d31ae77d ...

  8. Ansible-playbook简单应用的几个实例

    ①ansible-playbook的循环: 重复执行某任务:对迭代项的引用,固定变量名为“item”,而后要在task中使用with_items给定要迭代的元素列表,列表方法:字符串/字典(类似jso ...

  9. Miler-Rabbin素数判定

    前言 素数判定? 小学生都可以打的出来! 直接暴力O(n)O(\sqrt n)O(n​)-- 然后就会发现,慢死了-- 于是我们想到了筛法,比如前几天说到的詹欧筛法. 但是线性的时间和空间成了硬伤-- ...

  10. Logback 日志组件的使用

    Logback 是由 log4j 创始人设计的又一个开源日志组件. 一. logback 的介绍 ​ logback 当前分成三个模块:logback-core,logback- classic 和 ...