本篇文章将和大家学习总结webdriver模块操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换等方法的使用
目录
1 浏览器控制
1.1 控制浏览器窗口大小
1.2 控制浏览器前进、后退、关闭
1.3 刷新浏览器
3 鼠标和键盘控制
3.1 模拟鼠标操作
3.2 模拟键盘操作
4 警告框处理
5 多窗口切换
6 设置等待时间
6.1 强制等待
6.2 隐性等待
6.3 显示等待
【自动化测试工程师学习路线】
结语
Selenium-webdriverAPI提供了对页面元素定位和操作方法外,还提供了对浏览器本身的操作,如浏览器前进、后退、刷新、关闭、浏览器窗口大小设置等
Selenium-webdriverAPI对浏览器窗口设置提供了set_window_size(width,height)方法,第一个参数为宽度,第二个参数为高度。如将浏览器窗口设置成移动客户端的大小480*800,脚本为:
driver. set_window_size(480,800)
当然一般我们都希望打开浏览器后最大化窗口,Selenium-webdriverAPI也提供了窗口最大化的方法
maximize_window()
有时我们经常操作浏览器页面前进、后退以及关闭等操作,Selenium-webdriverAPI提供了对应的forword()、back()、quit()、close()方法
其中quit()、close()方法,不同的是quit()方法表示退出整个浏览器驱动,close()表示退出当前的浏览器窗口
Selenium-webdriverAPI提供刷新浏览器页面的方法为refresh()
具体的各个方法使用,如下面新建的browser.py脚本实例:
1 '''
2 Code description:
3 Create time:
4 Developer:
5 '''
6 # -*- coding: utf-8 -*-
7 from selenium import webdriver
8 import time
9 driver = webdriver.Ie()
10 driver.get('https://www.baidu.com')
11 driver.maximize_window() # 最大化窗口
12 time.sleep(5)
13 driver.set_window_size(480,800) # 设置窗口大小
14 driver.back() # 浏览器后退
15 driver.forward() # 浏览器前进
16 time.sleep(5)
17 driver.refresh() # 浏览器刷新
18 driver.quit() # 浏览器退出
19 # driver.close() # 关闭当前打开的浏览器页面
Webdriver提供了多种操作浏览器cookie的方法,主要如下:
get_cookies()
该方法会获取浏览器所有的cookie信息,cookie信息数据类型以字典的形式存放,即key-value对的形式
get_cookie(name)
该方法会获取cookie数据中属性键值name的值的cookie信息,其他键值数据信息不获取
add_cookie(cookie_dict)
该方法为添加cookie,由于我们知道cookie存放数据是以字典的形式,故添加cookie时必须是键值对形式
delete_cookie(cookie_dict)
该方法为删除cookie,与add对应
delete_all_cookies()
该方法为删除所有的浏览器cookie信息
具体方法使用如下图,新建cookie.py的脚本,还是以baidu.com为例子
1 '''
2 Code description:
3 Create time:
4 Developer:
5 '''
6 # -*- coding: utf-8 -*-
7 from selenium import webdriver
8 driver = webdriver.Ie()
9 driver.get('https://www.baidu.com/')
10 cookie = driver.get_cookies() # 获取所有的cookie,cookie数据以字典的形式存放
11 print(cookie)
12 print(driver.get_cookie('BAIDUID')) # get_cookie(name)方法用来获取cookie键值name对应的值
13 driver.add_cookie({'name': 'hello','value' : 'world'}) # 添加cookie
14 for cookie in driver.get_cookies():
15 print(driver.get_cookie('hello'))
16 driver.delete_cookie('hello') # 删除指定的cookie
17 # driver.delete_all_cookies() # 删除所有的cookie
18 driver.quit()
在浏览网页是电脑和我们交互的就是鼠标和键盘了,也是我们操作最多的。鼠标在现在的网页上已经有诸多操作,如单击、右击、双击、悬浮、拖拽等操作;键盘用于输入,有诸多输入键,如enter、backspace、空格等以及诸多组合键的使用。Webdriver对于鼠标和键盘也实现了比较多和详细的模拟实现方式,主要由webdriver中封装的ActionChains类实现。
对于鼠标的操作,ActionChains类主要提供了鼠标的右键、双击、悬浮、拖拽等方法
具体的方法如下:
下面以百度网盘网页客户端来说明模拟鼠标的这些操作方法,如下图选中一个文件夹后可以鼠标右键后有操作列表显示:
模拟实现鼠标右键操作来打开该文件夹,代码如下:
1 '''
2 Code description:
3 Create time:
4 Developer:
5 '''
6 # -*- coding: utf-8 -*-
7 from selenium import webdriver
8 from selenium.webdriver.common.action_chains import ActionChains
9 driver = webdriver.Ie()
10 driver.get('https://pan.baidu.com')
11 '''
12 中间省略百度网盘的登陆过程脚本
13 '''
14 # 定位到PyCharm这个元素位置
15 PyCharm = driver.find_element_by_xpath('//*[@id="layoutMain"]/div/div[2]/div/div[3]/div/div/dd/div[2]/div[1]')
16 ActionChains(driver).context_click(PyCharm).perform()
17 '''
18 调用ActionChains()方法,传入driver浏览器参数,类提供的鼠标右击操作方法context_click(),传入需要右击的元素PyCharm,最后
19 perform()方法为整个右击动作的提交
20 '''
21 driver.quit()
同样,上面的PyCharm文件夹,我们也可以双击鼠标来打开该文件,双击操作如下:
ActionChains(driver).double_click(PyCharm).perform()
鼠标悬浮操作,如将鼠标移动到网盘的账号处,会显示该账号的信息,如下图:
实现方法为move_to_element()如下:
user = driver.find_element_by_xpath('//*[@id="layoutHeader"]/div/div/dl/dd[2]/span') # 定位到网盘账户位置
ActionChains(driver).move_to_element(user).perform()
鼠标拖拽操作的没找到合适的网站,使用方法大致如下:
pesition1 = driver.find_element_by_xpath('//*[@id="layoutHeader"]') # 定位元素A的位置
pesition2 = driver.find_element_by_xpath('//*[@id="layoutHeader"]/div/div/dl/dd[2]/span') # 定位元素B的位置
ActionChains(driver).drag_and_drop(pesition1,pesition2).perform() # 进行拖拽操作
拖拽方法为drag_and_drop(参数1,参数2),参数1为定位到的需要拖拽的元素,参数2为定位到拖拽后的位置
之前我们已经使用过键盘输入的方法send_keys(),但是如果我们需要操作更多的键如回车、回格,ctrl、shift以及各种组合键,这时我们需要引入webdriver下面提供的keys类模块。
常用的键盘操作有:enter、backspace、ctrl+c、ctrl+v、F5等,keys模块都是有方法的
如模拟backspace键,打开百度,输入Python3,然后在Backspace去掉3这个数字,再百度搜索:
1 '''
2 Code description:
3 Create time:
4 Developer:
5 '''
6 # -*- coding: utf-8 -*-
7 from selenium import webdriver
8 from selenium.webdriver.common.keys import Keys
9 driver = webdriver.Ie()
10 driver.get('https://www.baidu.com/')
11 baidu = driver.find_element_by_id('kw') # 定位到百度搜索框
12 baidu.send_keys('Python3')
13 baidu.send_keys(Keys.BACK_SPACE) # 使用Keys.BACK_SPACE来模拟Backspace键其它
其它操作键盘的方法就不列举了,可以自己练习下,在导入Keys模块后就可以调用模块下所有封装好的方法:
现在几乎很多软件都会嵌入各种警示框,比如登陆验证出错会弹出警示框。对于这些弹出的警示框,webdriver也是提供了专门的方法,来处理这类软件警示框。
Webdriver通过switch_to.alert()方法来定位到警示框,并提供了如下对警示框的操作方法:
比如如下一个登录页面,当输入不对的账号或者密码时,会弹出警示框
下面看看这些处理警示框的方法使用:
username = driver.find_element_by_id('loginUserName')
username.send_keys('123')
password = driver.find_element_by_id('loginPassWord')
password.send_keys('123')
button_login = driver.find_element_by_id('loginBtn')
button_login.click()
alter = driver.switch_to_alert() # 获取警示框
alter.text # 获取警示框文本信息
alter.accept() # 确认警示框
alter.dismiss() # 取消确认
alter.send_keys() # 输入值,如果警示框有输入框
注意selenium现在的方法为:switch_to.alert()
有时我们需要打开多个浏览器窗口进行窗口切换,操作不同窗口,由于selenium-webdrvier只能在一个窗口中识别元素和对元素进行操作,如果想要操作另外一个窗口,就必须进行窗口切换。对此,webdriver也提供了这种多窗口切换的场景的实现方法。由于每个打开的窗口句柄是不同的,这样webdriver通过窗口句柄实现窗口切换。具体方法如下:
如下脚本以登录百度首页,并打开另一个窗口进入到注册页面,然后却换窗口到百度首页,进行搜索为例说明以上方法使用:
1 '''
2 Code description:
3 Create time:
4 Developer:
5 '''
6 # -*- coding: utf-8 -*-
7 from selenium import webdriver
8 driver = webdriver.Ie()
9 driver.get('https://www.baidu.com/')
10 driver.maximize_window()
11 sreach_windows = driver.current_window_handle # 获取当前百度搜索窗口的句柄,是一个字符串
12 print(sreach_windows)
13 driver.find_element_by_link_text(u'登录').click()
14 driver.find_element_by_link_text(u'立即注册').click()
15 all_handles = driver.window_handles # 得到搜索页面和注册页面所有的窗口句柄,返回的是一个列表
16 print(all_handles)
17 # 进入到注册窗口
18 for handle in all_handles:
19 if handle != sreach_windows:
20 driver.switch_to.window(handle) # 切换到指定窗口
21 print("现在进入的是注册窗口")
22 driver.find_element_by_name('userName').send_keys('123')
23 # 切换到搜索窗口
24 for handle in all_handles:
25 if handle == sreach_windows:
26 driver.switch_to.window(handle) # 切换到指定窗口
27 print("现在进入的是搜索窗口")
28 driver.find_element_by_id('TANGRAM__PSP_4__closeBtn').click() # 关闭注册窗口
29 driver.find_element_by_id('kw').send_keys('python')
30 driver.find_element_by_id('su').click()
31
在测试过程中,我们编写的脚本往往很快执行完成,为了观察一些重要步骤的执行效果,我们可以在脚本中添加执行等待时间或者我们需要定位的元素页面短时间没法加载出来时,此时如果没有设置等待时间,脚本执行就会出错:元素不存在,这时我们设置等待时间就非常有必要了。对此,selenium-webdriver提供了Explicit Waits(显示等待)和Implicit Waits(隐性等待)两种模式的等待时间设置,另外python标准库模块time也提供了一种非智能的sleep()等待时间模式。
Python标准库模块time提供强制等待设置,方法为sleep(),就是脚本执行过程中设置强制暂停脚本运行的时间间隔
设置隐性等待时间,由webdriver提供。隐性等待时间就是设置一个时间范围,有个最大响应时间,超时将会抛出异常。如下脚本,驱动打开IE浏览器,我们设置了最大打开等待时间是10s,也就是说可能2s时ie就开启,如果超过10s就会抛出异常。使用方法为:
driver.implicitly_wait(10)
设置显示等待时间,由webdriver下的WebDriverWait模块提供。WebDriverWait()会配合until()和until_not()方法一起使用,根据判断条件而进行灵活进行处理时间等待问题,他会不断的根据你设定的条件去判断,直到超过你设置的等待时间,如果设置的条件满足,然后进行下一步操作,如果没有满足会报一个'selenium.common.exceptions.TimeoutException: Message: '错误。
如下脚本设置用户名输入框显示等待时间,并轮训判断该元素是否存在,如果判断在设置时间内没有则抛出异常:,如下使用方式:
作为一个过来人,对学习过程中的困难深有体会。
如果你也在往自动化测试开发方向发展,在适当的年龄,选择适当的岗位,将自己的优势都发挥出来!
我的自动化测试之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和收集总结,所以,我和朋友特意花了一段时间整理编写了下面的《自动化测试工程师学习路线》,也整理了不少【网盘资源】,需要的朋友可以点击文末小卡片获取网盘链接。希望会给你带来帮助和方向。
1、自动化测试必备Python编程内容
2、Web UI 自动化测试基础内容
3、Web UI 自动化测试实战内容
4、APP UI 自动化测试基础内容
5、APP UI 自动化测试实战内容
6、API 接口自动化测试基础内容
7、API 接口自动化测试实战内容
8、CI/CD持续集成专项技术
9、自动化测试框架实战技术
上面就是我为大家整理出来的一自动化测试工程师发展方向知识架构体系图。希望大家能照着这个体系在3-4个月完成这样一个体系的构建。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。
学习是件需要坚持的事情,学习的过程可能会很枯燥,不过有一些人一起学的话大概就不会了吧,跟我一起学习,有人陪伴,就不会孤单。点击下方小卡片进群和大神交流切磋,也是很棒的哈!
这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。欢迎留言,或是关注我的专栏和我交流。