1、鼠标操作
1、概述
使用Selenium的ActionChains类来模拟鼠标操作,导入模块如下:
# 导入模块
from selenium.webdriver.common.action_chains import ActionChains
通过ActionChains对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。一些操作的方法如下所示:
click() #单击
click_and_hold() #在特定元素上单击鼠标左键(不释放)
release() #抬起鼠标
double_click() #鼠标双击
move_to_element() #鼠标悬停到指定元素上
context_click() #鼠标右击
drag_and_drop() #拖动
perform() #执行具体的操作,前面6个方法都是声明一个操作,只有调用perform()后才会真正执行操作
一个简单的示例如下:
ActionChains().click_and_hold(onElement).move_to_element(toElement).release().bu
ild().perform();
2、实战
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.maximize_window()
'''场景:在百度页面点击设置-高级搜索-在子页面更改数据'''
element = driver.find_element(By.ID,"s-usersetting-top")
ActionChains(driver).move_to_element(element).perform()
senior = driver.find_element(By.XPATH,"//span[text()='高级搜索']")
ActionChains(driver).click(senior).perform()
sleep(2)
notime = driver.find_element(By.XPATH,"//*[@id='adv-setting-gpc']/div/div[1]")
ActionChains(driver).move_to_element(notime).perform()
ActionChains(driver).click(notime).perform()
sleep(2)
ActionChains(driver).move_to_element(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()
sleep(2)
# 注意一定要使用 .perform()
ActionChains(driver).click(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()
sleep(5)
driver.close()
2、键盘操作
1、概述
Selenium中send_keys除了可以模拟键盘输入之外,还可以用它来输入键盘上的按键,甚至是组合键, 比如CTRL+A,CTRL+C,模块如下:
from selenium.webdriver.common.keys import Keys
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、实战
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get('https://www.baidu.com')
driver.maximize_window()
sleep(2)
driver.find_element(By.ID,'kw').send_keys('柠檬')
sleep(2)
# 删除一个字
# driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
# driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
sleep(2)
#组合键
#全选
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'a')
# #复制
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'c')
# #粘贴
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬
sleep(6)
##剪切
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x') #因为粘贴的是“柠檬”这2个字
# print(driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x').text) 没有这个方法
# #粘贴
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬柠檬
sleep(5)
driver.close()
3、文件上传
1、概述
文件上传是自动化中比较麻烦棘手的部分。
第一种情况:
<input type="file" id="fu" value="选择文件">
因为上传文件会需要打开windows的文件选择窗口,而selenium是无法操作这个窗口的
解决办法:使用send_keys写入文件的路径
第二种情况:
如果文件上传不是input元素,而是使用的第三方的控件。那么这种情况就很棘手了,必须要使用一些第 三方的工具,比如AutoIT来完成。参考:http://testingpai.com/article/1595507303689
mac平台上传文件:https://www.cnblogs.com/deeptester-vv/p/15629135.html
2、实战
注意:auto文件的文件名要根据实际的文件名去写
文件目录如下:
python代码如下:
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.XXXXXXXX.com/#/login")
driver.maximize_window()
driver.find_element(By.XPATH,"//input[@placeholder='请输入邮箱/手机号/账号']").send_keys("1234567892")
driver.find_element(By.XPATH,"//input[@placeholder='请输入密码']").send_keys("jiayoujiayou666")
sleep(2)
driver.find_element(By.XPATH,"//span[text()='登录']").click()
sleep(2)
driver.find_element(By.XPATH,"//*[@id='app']/div[2]/div[2]/div/span[3]/span/img").click()
driver.find_element(By.XPATH,"//li[text()='个人设置 ']").click()
sleep(3)
driver.find_element(By.XPATH,"//*[@id='app']/div[3]/div[1]/div[1]/span/img").click()
sleep(2)
driver.find_element(By.XPATH,"//span[text()='重新上传']").click()
sleep(1)
os.system('test4.exe E:\\python310\\web_auto\\d4_特殊场景处理\\test.jpg')
sleep(2)
driver.find_element(By.XPATH,"//div[@class='dialog-footer']/button[2]/span").click()
sleep(5)
driver.refresh()
sleep(5)
driver.close()