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']")
说明://表示当前页面某个目录下, 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() 鼠标悬停
实例模拟右击
# 导入提供鼠标操作的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) 键盘F1
网友评论