自动化测试Python+Selenium(二)

五、键盘事件

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()方法判断元素是否存在。

优点:
代码执行效率快,无需等待整个页面加载完成,只需加载到你要定位的元素就可以执行
缺点:
代码比较麻烦,需要导入三个包,导包路径比较复杂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值