selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
想了解selenium发展史点击一下。
实例百度搜索selenium
# 导入webdriver类
from selenium import Webdriver
# 调用selenium浏览器驱动,获取浏览器句柄
driver = webdriver.Firefox()
# 通过句柄访问URL
first_url = 'http://www.baidu.com'
driver.get(first_url)
# 通过句柄控制页面元素
driver.find_element_by_id("kw").send("selenium") # 在搜索框输入selenium
driver.find_element_by_id("su").click() # 单击百度一下
环境搭建
1.安装python3
python下载地址:https://www.pythin.org/
2.安装selenium
cmd命令行输入:pip install selenium
或
cmd命令行输入:pip install selenium=指定版本号
pip show selenium 查看当前包的版本信息
3.安装浏览器驱动(WebDriver)
驱动下载地址:http://www.seleniumhq.org/download/
解压文件,将得到的.exe文件放到python目录下
元素定位
1. id定位
通过HTML元素的ID值定位:
find_element_by_id("id名称")
2. name定位
通过HTML元素的name属性值定位:
find_element_by_name("name名称")
3. class定位
通过HTML元素的class值定位:
find_ement_by_class_name("class名称")
4. tag定位
每个一个元素本质上也是一个tag,如:<div>、<input>、<a>等
find_element_by_tag_name("input")
5. link定位
它专门用来定位文本链接:
find_element_by_link_text("链接名")
6. partial link定位
parial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接。
find_element_by_partial_link_text("一个很长的文本链接")
7. XPath定位
- 绝对路径定位
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
div[2]表示当前层级下的第二个div标签 - 元素属性定位
find_element_by_xpath("//input[@id='id名称']")
find_element_by_xpath("//input[@name='name名称']")
find_element_by_xpath("//input[@class='class名称']")
find_element_by_xpath("//*[@id='id名称']")
find_element_by_xpath("//input[@type='submit']")
find_element_by_xpath('//p[contains(text(), "问卷")]/a')
说明://表示当前页面某个目录下, input表示定位元素的标签名,[@id="id名称"]表示这个元素的id属性值,如果不想指定标签名,则可以用星号(*)代替,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。 - 层级与属性结合
如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找其上一级元素,或上上级元素。
find_element_by_xpath("//span[@class='class名称']/span/input")
- 使用逻辑运算符
如果一个属性不能唯一区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素
find_element_by_xpath("//input[@id='值' and @class='值']/span/input")
- 通过开发这工具(F12)定位元素复制xpath绝对路径
8. 常用css定位
选择器 | 例子 | 描述 |
---|---|---|
.class | .temp | class选择器,选择class="temp"的所有元素 |
#id | #kw | id选择器,选择id="kw"的所有元素 |
* | * | 选择所有元素 |
element | input | 选择所有<input>元素 |
> | div>input | 选择父元素为<div>的所有<input>元素,父子关系 |
+ | div+input | 选择同一级紧接在<div>元素之后的所有<input>元素 ,兄弟关系 |
[attrbute=value] | [type="submit"] | 选择type="submit"的所有元素 |
9. 用By定位元素
针对前面介绍的8种定位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法
find_element()方法只用于定位元素,需要两个参数,第一个参数是定位的类型,第二个参数是定位的具体方式,在使用By之前需要导入By类
# 导入By
from selenium.webdriver.common.by import By
# id定位
find_element(By.ID, "id值")
# name属性定位
find_element(By.NAME, "name值")
# class属性定位
find_element(By.CLASS_NAME, "class值")
# 标签定位
find_element(By.TAG_NAME, "input")
#定位链接
find_element(By.LINK_TEXT, "新闻")
# 定位长链接
find_element(By.PARTIAL_LINK_TEXT, "新")
# xpath定位
find_element(By.XPATH, "//*[@class='值']")
# css定位
find_element(By.CSS_SELECTOR, "span.class值>input#值")
10. 定位一组元素
定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多加了个s表示复数。
用于场景:批量操作元素。
例如,勾选页面上所有的复选框,先获取一组元素,再从这组对象中过滤出需要操作的元素。
# 选择页面上所有的tag_name为input的元素
inputs=driver.find_elements_by_tag_name('input')
# 然后从中过滤出type为checkbox的元素,单击勾选
fro input in inputs:
if input.get_attribute('type')== 'chexkbox':
input.click()
操作页面的方法
1. 简单的元素操作
-
back()
后退 -
forward()
前进 -
refresh()
刷新(F5) -
set_window_size(480*800)
设置浏览器窗口大小 -
maximize_window()
全屏显示 -
clear()
清除文本 -
send_keys("值")
模拟按键输入 -
click()
单击元素 -
submit()
用于提交表单,相当于“回车”键的操作 -
quit()
关闭所有窗口 -
close()
关闭当前窗口
2. 获取页面信息
-
size
返回元素的尺寸 -
text
获取元素的文本内容 -
get_attribute(name)
获取属性值 -
is_displayed
判断元素是否可见 (True可见,False不可见) -
title
获取当前页面的标题 -
current_url
获得当前页面的URL
3. 鼠标事件
perform()
执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。context_click()
右击double_click()
双击drag_and_drop
拖动move_to_element()
鼠标悬停release()
在某个元素位置松开鼠标左键move_by_offset(xoffset, yoffset)
鼠标从当前位置移动到某个坐标move_to_element(to_element)
鼠标移动到某个元素move_to_element_with_offset(to_element, xoffset, yoffset)
移动到距某个元素(左上角坐标)多少距离的位置
实例模拟右击
# 导入提供鼠标操作的ActionChains类
from selenium webdriver import ActionChains
# 定位要右击的元素
youji=driver.find_element_by_id("xx")
# 调用ActionChains()类,将浏览器驱动driver作为参数传入
# context_click()方法用于模拟鼠标右击操作
ActionChains(driver).context_click(youji).perform()
4. 键盘事件
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.F1)
键盘F1key_down(value, element=None)
按下某个键盘上的键key_up(value, element=None)
松开某个键
元素定位调试
通过$()调试定位
-
通过$x()调试xpath定位
print(driver.page_source) 打印元素内容,用于调试用