Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。
定位节点
Selenium 提供了 8 种定位单个节点的方法,如下所示:
定位节点方法
方法 说明
find_element_by_id() 通过 id 属性值定位
find_element_by_name() 通过 name 属性值定位
find_element_by_class_name() 通过 class 属性值定位
find_element_by_tag_name() 通过 tag 标签名定位
find_element_by_link_text() 通过标签内文本定位,即精准定位。
find_element_by_partial_link_text() 通过标签内部分文本定位,即模糊定位。
find_element_by_xpath() 通过 xpath 表达式定位
find_element_by_css_selector() 通过 css 选择器定位
假设下面代码某个页面的代码片段,如下所示:
{‘width’: 500, ‘height’: 22}
Selenium事件处理
Selenium WebDriver 提供了一些事件处理函数(鼠标、键盘等),下面我们对常用的事件函数做简单介绍。
- 鼠标事件
Selenium WebDriver 将关于鼠标的操作方法都封装在 ActionChains 类中,使用时需要引入 ActionChains 类,如下所示:
from selenium.webdriver.common.action_chains import ActionChains
该类包含了鼠标操作的常用方法:
鼠标事件
方法 说明
ActionChains(driver) 构造 ActionChains 鼠标对象。
click() 单击
click_and_hold(on_element=None) 单击鼠标左键,不松开
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位。
perform() 将所有鼠标操作提交执行。
示例如下:
from selenium import webdriver
#导入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get(“http://c.biancheng.net”)
通过xpath表达式定位到要悬停的元素
above = driver.find_element_by_xpath(‘//ul[@id=“ad-link-top”]/li[1]’)
对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
2) 键盘事件
Selenium WebDriver 的 Keys 模块提供了模拟键盘输入的 send_keys() 方法,除此之外,该模块也提供了操作键盘的其他方法,比如复制、粘贴等等。
在使用之前,首先需要导入 Keys 类,如下所示:
from selenium.webdriver.common.keys import Keys
下面列举了一些常用方法:
键盘操作
方法 说明
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.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 键盘 F1…Fn
keys.down(value,element=None) 按下键盘上的某个键
keys.up(value,element=None) 松开键盘上的某个键
示例如下:
from selenium import webdriver
引入 Keys 模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get(“http://www.baidu.com”)
输入框输入内容
driver.find_element_by_id(“kw”).send_keys(“C语言中文网H”)
删除多输入的一个H
driver.find_element_by_id(“kw”).send_keys(Keys.BACK_SPACE)
#单击“百度”一下查找
driver.find_element_by_id(“su”).click()
time.sleep(3)
driver.quit()
其它键盘操作方法,如下所示:
纯文本复制
输入空格键 + “Python教程”
driver.find_element_by_id(“kw”).send_keys(Keys.SPACE)
driver.find_element_by_id(“kw”).send_keys(“Python教程”)
ctrl+a 全选输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘a’)
ctrl+x 剪切输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘x’)
ctrl+v 粘贴内容到输入框
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘v’)
使用回车键来代替单击操作click
driver.find_element_by_id(“su”).send_keys(Keys.ENTER)