Selenium08--webdriver的高级操作(二)鼠标&键盘模块

键盘模块

1、仍然使用send_keys发送按键

2、selenium有专门的Keys模块进行键盘操作

3、组合键的发送用"Keys.control,'A'"(复制)

4、按键不区分大小写

5、连续按键可以用"*n"

我们先看下类Keys下面有哪些按键,输入Keys,然后按住ctrl点击

可以看到里面定义了很多按键变量,格式为

按键名:对应值

所以进行按键操作时,有两种方式

1.Keys.按键名

2.直接输入按键对应的值

实例演示

自己想个需求:

1.打开必应官网

2.在国内版搜索框输入‘自动化测试研习社公众号’并复制

3.切换到国际版

4.在国际版搜索框粘贴

5.删除‘公众号’并按回车键进行搜索

代码:

from time import sleep
from selenium import webdriver
#导入键盘模块Keys
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
#1.打开必应官网
driver.get('https://cn.bing.com/')
#2.在国内版搜索框输入‘自动化测试研习社公众号’
sleep(1)
driver.find_element_by_css_selector('#sb_form_q').send_keys('自动化测试研习社公众号')
#复制文本
sleep(1)
driver.find_element_by_css_selector('#sb_form_q').send_keys(Keys.CONTROL,'A')#全选
driver.find_element_by_css_selector('#sb_form_q').send_keys(Keys.CONTROL,'C')#复制
#3.切换到国际版
sleep(1)
driver.find_element_by_css_selector('#est_en').click()
#4.在国际版搜索框粘贴
sleep(1)
driver.find_element_by_css_selector('#sb_form_q').send_keys('\ue009','V')#Keys.CONTROL = '\ue009'
#5.删除‘公众号’三个字--BACKSPACE*3
sleep(1)
driver.find_element_by_css_selector('#sb_form_q').send_keys(Keys.BACKSPACE*3)
#6.按回车键进行搜索
sleep(1)
driver.find_element_by_css_selector('#sb_form_q').send_keys(Keys.ENTER)

运行结果:

鼠标模块

导入模块

from selenium.webdriver import ActionChains

通过ActionChains类模拟鼠标的单击、双击、右击、移动、拖拽等动作

ActionChains常用方法:

#右键
context_click(self, on_element=None)
#双击
double_click(self,on_element=None)
#左键
click(self,on_element=None)
#鼠标移动到某个元素
move_to_element(self,to_element=None)
#按住左键不放
click_and_hold(self,on_element=None)
#拖拽到某个元素然后松开
drag_and_drop(self,soure,target)
#拖拽到某个坐标然后松开
drag_and_drop_by_offset(self,source,xoffset,yoffset)
#按下某个键
key_down(self,value,element=None)
#松开某个键
key_up(self,value,element=None)
#鼠标从当前位置移动到某个坐标
move_by_offset(self,xoffset,yoffset)
#移动到距某个元素(左上角坐标)多少的位置
move_to_element_with_offset(self, to_element, xoffset, yoffset)
#在某个元素位置松开鼠标左键
release(self,on_element=None)
#发送某个键到当前焦点的元素
send_keys(self,*keys_to_send)
#发送某个键到指定元素
send_keys_to_element(self,element,*keys_to_send)

两种用法:

1.链式调用

ActionChains(driver).动作1.动作2.perform()  #perform执行动作

2.分步执行

my_action =ActionChains(driver)
my_action.动作1
my_action.动作2
my_action.perform()

实例演示(部分方法):

from selenium.webdriver import ActionChains
from time import sleep
from  selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')#打开百度
driver.find_element_by_css_selector('#kw').send_keys('自动化测试研习社')#搜索栏输入‘自动化测试研习社’
my_action = ActionChains(driver)
ele1 = driver.find_element_by_css_selector('#su')#找到‘百度一下’按钮
my_action.move_to_element(ele1).perform()#鼠标移动到‘百度一下’
my_action.click()#点击
my_action.perform()
sleep(1)
driver.back()#返回上一页
sleep(1)
ele2 = driver.find_element_by_css_selector('#s-top-left>div>a')#找到‘更多’按钮
my_action1 = ActionChains(driver)
my_action1.move_to_element(ele2)#鼠标移动到‘更多按钮’
my_action1.perform()

过程中遇到一个问题:

返回页面(页面刷新)后,之前的ActionChains(driver)对象‘my_action’就不能用了,必须定义一个新的‘my_action1’,否则会报错stale element reference: element is not attached to the page document

有大佬看到希望能给我解释下原因~

扫码关注公众号‘自动化测试研习社’

一起变强

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值