1.鼠标事件
在实际的web 产品测试中鼠标事件操作步骤,有关鼠标的操作,不单单只有单击,有时候还要用到右击,双击,拖动等操作,这些操作包含在ActionChains 类中。ActionChains类提供的鼠标事件常用方法(perform()执行所有ActionChains中存储的行为):
ActionChains 类鼠标操作的常用方法:
l context_click() 右击
l double_click() 双击
l drag_and_drop() 拖动
l move_to_element() 鼠标悬停在一个元素上
click_and_hold() 按下鼠标左键在一个元素上
1.2鼠标事件操作步骤
1.引入包ActionChains()
from selenium.webdriver.common.action_chains import ActionChains
语法:
ActionChains(driver).鼠标事件方法.perform()
这里需要注意的是,在使用ActionChains类下面的方法之前,要先将包引入。
2.定位需要鼠标操作的元素
按照普通元素定位方法实现(8种元素定位方法)
3.执行鼠标事件
ActionChains()
ActionChains(driver)
driver: wedriver 实例执行用户操作。
ActionChains 用于生成用户的行为;所有的行为都存储在actionchains 对象。通过perform()执行存储的行为。
perform()执行所有ActionChains 中存储的行为。perfrome()同样也是ActionChains 类提供的的方法,通常与ActionChains()配合使用。
context_click() 右击
1.#选择需要鼠标右击的目标元素
2.right = driver.find_element_by_css_selector('a[title="自动化相关"]')
3.#执行鼠标右击操作
4.ActionChains(driver).context_click(right).perform()
double_click() 双击
1.# 定位到要双击的元素
2.double_click = driver.find_element_by_id("id值")
3.# 双击操作
4.ActionChains(driver).double_click(double_click).perform()
drag_and_drop(source, target) 鼠标拖动
在源元素上按下鼠标左键,然后移动到目标元素上释放。
source:鼠标拖动的源元素。
target:鼠标释放的目标元素。
语法:
drag_and_drop(起始元素,目标元素) # 将起始元素,拖动到目标元素
drag_and_drop_by_offset(起始元素,x坐标,y坐标) #将起始元素,拖动到指定的坐标位置
1.# 定位元素的源位置
2.element = driver.find_element_by_id("id值")
3.# 定位元素要移动到的目标位置
4.target = driver.find_element_by_xpath("定位脚本")
5.# 拖放操作
ActionChains(driver).drag_and_drop(element,target).perform()
move_to_element() 悬停(将鼠标移到某个元素上)
1.# 定位到要悬停的元素
2.above = driver.find_element_by_link_text("关键字")
3.# 悬停操作
4.ActionChains(driver).move_to_element(above).perform()
click_and_hold() 按下鼠标左键在一个元素上
1.#定位到鼠标按下左键的元素
2.left=driver.find_element_by_xpath("定位脚本")
3.#对定位到的元素执行鼠标左键按下的操作
4.ActionChains(driver).click_and_hold(left).perform()
2.键盘事件(必须和send_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) 键盘F1
send_keys(Keys.F12) 键盘F12
2.1脚本
1.from selenium import webdriver
2.from selenium.webdriver.common.keys import Keys
3.import time
4."""
5.键盘事件
6."""
7.driver = webdriver.Firefox()
8.driver.get("https://www.baidu.com")
9.driver.find_element_by_id("kw").send_keys("Selenium")
10.time.sleep(2)
11.# Ctrl+A 全选操作
12.driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
13.time.sleep(2)
14.# Ctrl+C 复制操作
15.driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')
16.time.sleep(2)
17.driver.get("http://cn.bing.com")
18.time.sleep(2)
19.# Ctrl+V 粘贴操作
20.driver.find_element_by_id("sb_form_q").send_keys(Keys.CONTROL,'v')
21.time.sleep(2)
22.# 回车键操作
23.driver.find_element_by_id("sb_form_q").send_keys(Keys.ENTER)
24.time.sleep(2)
driver.quit()
3.下拉菜单选择
带有<select></select>标签的下拉菜单选择页面源码:
3.1 使用普通方法操作下拉菜单:
先定位下拉菜单,再定位菜单中的具体元素,对下拉菜单进行二次定位。
代码片段
1.#先定位下拉框
2.selector = driver.find_element_by_id('id值')
3.#操作下拉框选项
element = selector.find_element_by_xpath('定位脚本').click()
3.2 使用Select类来处理下拉菜单(推荐)
语法
Select(select标签元素).select_by_index() #通过选项索引值定位 索引从0开始
Select(select标签元素).select_by_value() #通过选项value属性值定位
Select(select标签元素).select_by_visible_text() #通过选项的text值定位
脚本
1.from selenium import webdriver
2.import time
3.from selenium.webdriver.support.select import Select #导包
4.driver = webdriver.Firefox()
5.driver.get("https://www.baidu.com")
6.#通过value来选择
7.select.select_by_value('value值')
8.time.sleep(2)
9.#通过index来选择
10.select.select_by_index(索引)
11.time.sleep(2)
12.#通过文本直接选择
13.select.select_by_visible_text('关键字')
14.time.sleep(5)
15.driver.quit()
4.滚动条操作
WebDriver类库中并没有直接提供对滚动条进行操作方法,但是它提供了可调用JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的
准备js脚本:
js="window.scrollTo(x,y)" #左右滑动改变x轴,上下滑动改变y轴
执行脚本:
driver.execute_script(js) #使用webdriver中execute_script()的方法执行js脚本
聚焦到某个元素位置:
#定位聚焦元素位置
target = driver.find_element_by_xxxx()
#编写聚焦元素的js脚本
js=arguments[索引值].scrollIntoView()
#执行脚本
driver.execute_script(js,target)
5.iframe操作
iframe是前段常用的一个标签,用于HTML的页面嵌套,iframe会导致嵌套的页面的元素能定位但是实际上元素不在本页面,要定位到iframe里的元素,需要进行页面的切换
页面切换的方式:
1、switch_to.frame(id值或name值) #默认可以直接取表单的id或name属性进行切换,也可以用Xpath等。
2、switch_to.frame(索引值) #索引从0开始
3、switch_to.frame(元素定位) #通过元素定位切换
实际操作:
进入iframe中:
driver.switch_to.frame(参数)
- 1.当iframe/frame标签有固定的id/name属性值时,参数=id属性值/name属性值
- 2.当iframe/frame标签没有固定的id/name属性值时,参数=iframe/frame元素----元素定位
- 3.当知道iframe/frame标签索引值时,参数=frame/iframe索引值
操作iframe中的元素:
元素定位
元素操作
退出iframe
driver.switch_to.parent_frame() # 退出当前层
driver.switch_to.default_content() # 退出所有iframe
iframe在页面中的应用场景
1.登录
2.后台管理系统菜单栏
3.富文本编辑器
6.多窗口切换
在超链接(a)标签里面存在target="_blank"的时候,会打开一个新的页面.
获取窗口句柄:
driver.current_window_handle #获取当前窗口句柄(原页面)
driver.window_handles #获取所有窗口句柄,返回一个列表
切换窗口:
driver.switch_to.window(窗口句柄)
driver.switch_to.window(driver.window_handles[索引值])
通过js脚本移除target属性:
js='document.getElementById("id值").removeAttribute("target") #编写脚本
driver.execute_script(js) #执行脚本
7弹窗处理
7.1原生弹窗:
alert:只有一个确定按钮
confirm:有一个确定按钮和一个取消按钮
prompt:有一个输入框,一个确定按钮和取消按钮
为什么要取消弹窗:因为存在弹窗页面将无法进行操作
处理页面上所有的原生弹窗:
alert:
变量=driver.switch_to.alert #获取所有的原生弹窗
变量.accept() #点击确认
confirm:
变量=driver.switch_to.alert #获取所有的原生弹窗
变量.accept() #点击确认
变量.dismiss() #点击取消
prompt:
变量=driver.switch_to.alert #获取所有的原生弹窗
变量.send_keys(输入的内容) #输入内容
变量.accept() #点击确认
变量.dismiss() #点击取消
7.2原生弹窗:(没有直接处理的方法,用js脚本进行处理)
js=document.getElementById("id值").style.display="none" #编写脚本
driver.execute_script(js) #执行脚本
8.选择框操作
8.1单选框:在HTML代码里type是radio且一组的单选name属性值全部一样
语法:
首先是定位选择框的位置判断是否选中,再点击
#首先定位元素位置
ele=driver.find_element_by_css_selector('定位脚本')
# 判断元素是否被选中,如果元素被选中,不进行点击操作,反之进行点击操作
if ele.is_selected():
pass
else:
banana.click()
8.2复选框:在HTML代码里type是checkbox且一组的单选name属性值相同
# 有选择性的选择
option = ["选择项1","选择项2"]
#获取全部选项
eles = driver.find_elements_by_name("checkbox")
#遍历获取的选项
for i in eles:
if i.get_attribute("value") in option:
time.sleep(1)
i.click()
8.3全部勾选:
checkboxs = driver.find_elements_by_name("checkbox")
for i in checkboxs:
if i.is_selected():
pass
else:
time.sleep(1)
i.click()