一、鼠标和键盘操作
手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供
1、鼠标操作
* 导入动作链类,动作链可以储存鼠标的动作,并一起执行
from selenium.webdriver import ActionChains
ActionChains(driver)
* 鼠标右击
el = driver.find_element_by_xxx(value)
context_click(el) 对el执行右击
* 执行ActionChains中储存的所有动作
perform()
例如:ActionChains(driver).context_click(ele).perform() 点击鼠标右键
ActionChains(driver). double_click(ele).perform() 点击鼠标左键
ActionChains(driver).move_to_element(el).perform() 鼠标悬停
案例:
from selenium import webdriver
from selenium.webdriver import ActionChains
drive=webdriver.Firefox()
url="https://www.baidu.com/"
drive.get(url)
# 获取更多
gd=drive.find_element_by_css_selector(".s-bri")
# 鼠标左击
ActionChains(drive).double_click(gd).perform()
# 鼠标右击
# ActionChains(drive).context_click(gd).perform()
结果:
2、键盘操作
键盘操作使用的是Keys类,一般配合send_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,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1 ……
send_keys(Keys.F12) 键盘 F12
案例:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
drive = webdriver.Firefox()
url="http://www.baidu.com"
drive.get(url)
# 百度输入框
db = drive.find_element_by_id("kw")
db.send_keys("123")
db.send_keys(Keys.BACK_SPACE) # 删除键
# db.send_keys(Keys.SPACE) # 空格键
# db.send_keys(Keys.TAB) # 制表键
# db.send_keys(Keys.ESCAPE) # 回退键
# db.send_keys(Keys.ENTER) # 回车键
# db.send_keys(Keys.CONTROL,"a") # 全选
# db.send_keys(Keys.CONTROL,"x") # 剪切
# db.send_keys(Keys.CONTROL,"v") # 粘贴
# db.send_keys(Keys.F1) # 键盘F1
# db.send_keys(Keys.F12) # 键盘F12
二、下拉框的使用
from selenium import webdriver
import time
driver=webdriver.Firefox()
url="https://www.baidu.com/"
driver.get(url)
# 获取设置
sz=driver.find_element_by_id("s-usersetting-top")
sz.click()
# 获取高级设置
gs=driver.find_element_by_css_selector(".s-user-setting-pfmenu > a:nth-child(2)")
gs.click()
time.sleep(3)
# 获取全部时间
sj=driver.find_element_by_class_name("c-select-selected-value")
sj.click()
# 获取准确时间
zs=driver.find_elements_by_class_name("c-select-item")
zs[3].click()
# 获取高级设置按钮
bd=driver.find_element_by_class_name("advanced-search-btn")
# bd=driver.find_element_by_xpath("/html/body/div[1]/div[6]/div/div/div/div[2]/div/form/ul/li[6]/div/input")
bd.click()
结果:
三、浏览器等待
1、为什么要进行等待?
1).网速慢
2).网站内容过多
3).如果不进行等待而直接定位元素,可能会抛出异常
2、selenium中等待的分类: 显示等待 隐式等待
3、显示等待
显示等待是根据条件进行等待,等待条件出现
实现: from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。 WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located( (By.CLASS_NAME,"g-hu")))
4、隐式等待
隐式等待是根据是件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素都加载完成定就结束没有加载出元素就抛出 NosuchException.
案例:
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
drive = webdriver.Firefox()
url="http://www.baidu.com"
drive.get(url)
ele = drive.find_element_by_id("kw")
ele.send_keys("python")
# 隐式等待
drive.implicitly_wait(20)
ele_btn = drive.find_element_by_id("su")
ele_btn.click()
# # 固定等待
# time.sleep(23)
# ele_btn = driver.find_element_by_id("su")
# ele_btn.click()
#显示等待
# WebDriverWait(drive,20,0.5).until(EC.presence_of_element_located((By.ID,"su")))
# ele_btn = drive.find_element_by_id("su")
# ele_btn.click()
5、等待优先级:优先 隐式等待 次之 显式等待 最次 固定等待