键盘模块
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
有大佬看到希望能给我解释下原因~
扫码关注公众号‘自动化测试研习社’
一起变强