Web 自动化测试(Selenium) 鼠标和键盘操作以及浏览器等待
目录
手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供
导入动作链类,动作链可以储存鼠标的动作,并一起执行
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 driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 第一种 # gengduo = driver.find_element_by_link_text("更多") # gengduo.click() # 第二种 # gengduo = driver.find_element_by_link_text("更多") # ActionChains(driver). double_click(gengduo).perform() # 鼠标左键点击 # kongbai = driver.find_element_by_id("head_wrapper") # ActionChains(driver).context_click(kongbai).perform() # 鼠标右键点击 baidulogo = driver.find_element_by_id("s_lg_img") # 百度页面的logo ActionChains(driver).move_to_element(baidulogo).perform() # 鼠标悬停
常用键盘操作
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 driver = webdriver.Firefox() driver.get("http://www.baidu.com") inp = driver.find_element_by_id("kw") inp.send_keys("123") # inp.send_keys(Keys.BACK_SPACE) # 删除键 # inp.send_keys(Keys.SPACE) # 空格键 # inp.send_keys(Keys.TAB) # 制表键 # inp.send_keys(Keys.ESCAPE) # 回退键 # inp.send_keys(Keys.ENTER) # 回车键 # inp.send_keys(Keys.CONTROL,"a") # 全选 inp.send_keys(Keys.CONTROL,"x") # 剪切 inp.send_keys(Keys.CONTROL,"v") # 粘贴 inp.send_keys(Keys.F1) # 键盘F1 inp.send_keys(Keys.F12) # 键盘F12
1)网速慢
2)网站内容过多
3)如果不进行等待而直接定位元素,可能会抛出异常
优先 隐式等待 次之 显示等待 最次 固定等待
1)显示等待
显示等待是根据条件进行等待,等待条件出现
实现:
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”)))
2)隐式等待
隐式等待是根据事件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素都加载完成定就结束没有加载出元素就抛出NosuchException
3)固定等待
time模块
time.sleep()
优先 隐式等待 次之 显式等待 最次 固定等待
from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") ele = driver.find_element_by_id("kw") ele.send_keys(123) # # 固定等待 # import time # time.sleep(23) # ele_btn = driver.find_element_by_id("su") # ele_btn.click() # # 显示等待 # 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,20,0.5).until(EC.presence_of_element_located((By.ID,"su"))) # ele_btn = driver.find_element_by_id("su") # ele_btn.click() # 隐式等待 driver.implicitly_wait(20) ele_btn = driver.find_element_by_id("su") ele_btn.click()