五、键盘事件
Keys()类提供了键盘上几乎所有按键的方法。 前面了解到, send_keys()方法可以用来模拟键盘输入, 除此 之外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。
常用键盘操作
- 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+v
- send_keys(Keys.CONTROL,‘v’):剪切ctrl+x
- send_keys(Keys.F1):F1键
- …
- send_keys(Keys.F12):F12键
示例
from selenium import webdriver
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
六、获取断言信息
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。
- title:获取当前页面标题
- current_url:获取当前页面的url
示例
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
print('before=========')
title=driver.title
print(title)
now_url=driver.current_url
print(now_url)
driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
driver.find_element_by_xpath("//input[@id='su']").click()
print('after==========')
title=driver.title
print(title)
now_url=driver.current_url
print(now_url)
输出结果
七、设置元素等待
1、sleep强制等待
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
sleep(2) #设置等待2秒钟
driver.get('http://www.baidu.com')
优点:
代码简洁,简单明了
缺点:
如果设置sleep时间过短,元素还没有加载出来就报错;如果设置等待时间过长,元素加载出来后还在等待,浪费时间,影响代码的整体运行效率。
2、implicitly_wait()隐式等待
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(20) #设置等待20秒钟
driver.get('http://www.baidu.com')
优点:
1、代码简洁
2、直接在driver初始化后面加implicitly_wait,整个程序的运行过程中都会有效,后面的代码都会受影响
3、在设置的时间内没有加载完页面,会报NosuchElementError错误,如果元素在第6s定位到则继续执行不需要一直等待
缺点:
非要加载到整个页面才能执行代码,但一般情况下只要加载到要定位的元素就可以,不需要整个页面都加载出来,这样影响运行效率。
3、WebDriverWait()显式等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #通过as关键字将expected_conditions 重命名为EC
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('selenium')
driver.quit()
在设置时间内,默认每隔一段时间检测一次当前 页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver:浏览器驱动
- timeout:最大超时时间,以秒为单位
- poll_frequency:检测的间隔时长,默认为0.5s
- ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
- until(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为True - until_not(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False
在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。
优点:
代码执行效率快,无需等待整个页面加载完成,只需加载到你要定位的元素就可以执行
缺点:
代码比较麻烦,需要导入三个包,导包路径比较复杂