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. System.Configuration.ConfigurationManager.cs

    ylbtech-System.Configuration.ConfigurationManager.cs 1.程序集 System.Configuration, Version=4.0.0.0, Cu ...

  2. python模块(转自Yuan先生)

    模块&包(****)                                                                模块(modue)的概念: 在计算机程序的开 ...

  3. 小程序跳坑 --- navigator 和 API中wx.系列的跳转(如 wx.navigateTo、wx.reLaunch等)

    工作之余,想着帮老妈开发个小程序,一是宣传一下她的业务,二是学习使用一下微信小程序的开发,哈哈.在此过程中遇到了navigator跳转的问题,最终还是成功解决了,下面就记录下来,并做个系列总结以作记录 ...

  4. 《DSP using MATLAB》Problem 8.36

    上代码: function [wpLP, wsLP, alpha] = lp2lpfre(wplp, wslp) % Band-edge frequency conversion from lowpa ...

  5. netty 私有协议栈

    通信协议从广义上区分,可以分为公有协议和私有协议.由于私有协议的灵活性,它往往会在某个公司或者组织内部使用,按需定制,也因为如此,升级起来会非常方便,灵活性好.绝大多数的私有协议传输层都基于TCP/I ...

  6. 2019-5-15-影子系统让-C++-程序无法运行

    title author date CreateTime categories 影子系统让 C++ 程序无法运行 lindexi 2019-05-15 15:24:35 +0800 2019-05-1 ...

  7. leetcode-142-环形链表②

    题目描述: 方法一:O(n) O(n) # Definition for singly-linked list. # class ListNode(object): # def __init__(se ...

  8. 【JZOJ3319】雪地踪迹

    description 森林里有一片长方形的草地,在清晨的大雪过后被一层厚厚的积雪所掩盖(下图左). 住在森林里的兔子和狐狸,穿越草地,都会在雪地上留下他们的踪迹.他们总是从左上角进入,并从右下角离开 ...

  9. 两个datagrid的数据移动(支持多选)

    1.需求 :点击卸车和撤销按钮可以实现 1和2 之间数据的移动(支持多选) 2. 代码 (这里只写一个撤销的功能) //撤销按钮 function moveOut() { var item = $(' ...

  10. java内存模型JMM理解整理

    什么是JMM JMM即为JAVA 内存模型(java memory model).因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且 ...