本篇学习总结webdriver模块操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换等方法的使用

1    浏览器控制

Selenium-webdriverAPI提供了对页面元素定位和操作方法外,还提供了对浏览器本身的操作,如浏览器前进、后退、刷新、关闭、浏览器窗口大小设置等

1.1    控制浏览器窗口大小

Selenium-webdriverAPI对浏览器窗口设置提供了set_window_size(width,height)方法,第一个参数为宽度,第二个参数为高度。如将浏览器窗口设置成移动客户端的大小480*800,脚本为:

driver. set_window_size(480,800)

当然一般我们都希望打开浏览器后最大化窗口,Selenium-webdriverAPI也提供了窗口最大化的方法

maximize_window()

1.2    控制浏览器前进、后退、关闭

有时我们经常操作浏览器页面前进、后退以及关闭等操作,Selenium-webdriverAPI提供了对应的forword()、back()、quit()、close()方法

其中quit()、close()方法,不同的是quit()方法表示退出整个浏览器驱动,close()表示退出当前的浏览器窗口

1.3    刷新浏览器

Selenium-webdriverAPI提供刷新浏览器页面的方法为refresh()

具体的各个方法使用,如下面新建的browser.py脚本实例:

 '''
Code description:
Create time:
Developer:
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.Ie()
driver.get('https://www.baidu.com')
driver.maximize_window() # 最大化窗口
time.sleep(5)
driver.set_window_size(480,800) # 设置窗口大小
driver.back() # 浏览器后退
driver.forward() # 浏览器前进
time.sleep(5)
driver.refresh() # 浏览器刷新
driver.quit() # 浏览器退出
# driver.close() # 关闭当前打开的浏览器页面

2      操作浏览器cookie

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为例子

 '''
Code description:
Create time:
Developer:
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Ie()
driver.get('https://www.baidu.com/')
cookie = driver.get_cookies() # 获取所有的cookie,cookie数据以字典的形式存放
print(cookie)
print(driver.get_cookie('BAIDUID')) # get_cookie(name)方法用来获取cookie键值name对应的值
driver.add_cookie({'name': 'hello','value' : 'world'}) # 添加cookie
for cookie in driver.get_cookies():
print(driver.get_cookie('hello'))
driver.delete_cookie('hello') # 删除指定的cookie
# driver.delete_all_cookies() # 删除所有的cookie
driver.quit()

3      鼠标和键盘控制

在浏览网页是电脑和我们交互的就是鼠标和键盘了,也是我们操作最多的。鼠标在现在的网页上已经有诸多操作,如单击、右击、双击、悬浮、拖拽等操作;键盘用于输入,有诸多输入键,如enter、backspace、空格等以及诸多组合键的使用。Webdriver对于鼠标和键盘也实现了比较多和详细的模拟实现方式,主要由webdriver中封装的ActionChains类实现。

3.1    模拟鼠标操作

对于鼠标的操作,ActionChains类主要提供了鼠标的右键、双击、悬浮、拖拽等方法

具体的方法如下:

  1. 右击:context_click()
  2. 双击:double_click()
  3. 悬浮:move_to_element()
  4. 拖拽:drag_and_drop()

下面以百度网盘网页客户端来说明模拟鼠标的这些操作方法,如下图选中一个文件夹后可以鼠标右键后有操作列表显示:

模拟实现鼠标右键操作来打开该文件夹,代码如下:

 '''
Code description:
Create time:
Developer:
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Ie()
driver.get('https://pan.baidu.com')
'''
中间省略百度网盘的登陆过程脚本
'''
# 定位到PyCharm这个元素位置
PyCharm = driver.find_element_by_xpath('//*[@id="layoutMain"]/div/div[2]/div/div[3]/div/div/dd/div[2]/div[1]')
ActionChains(driver).context_click(PyCharm).perform()
'''
调用ActionChains()方法,传入driver浏览器参数,类提供的鼠标右击操作方法context_click(),传入需要右击的元素PyCharm,最后
perform()方法为整个右击动作的提交
'''
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为定位到拖拽后的位置

3.2   模拟键盘操作

之前我们已经使用过键盘输入的方法send_keys(),但是如果我们需要操作更多的键如回车、回格,ctrl、shift以及各种组合键,这时我们需要引入webdriver下面提供的keys类模块。

常用的键盘操作有:enter、backspace、ctrl+c、ctrl+v、F5等,keys模块都是有方法的

如模拟backspace键,打开百度,输入Python3,然后在Backspace去掉3这个数字,再百度搜索:

 '''
Code description:
Create time:
Developer:
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Ie()
driver.get('https://www.baidu.com/')
baidu = driver.find_element_by_id('kw') # 定位到百度搜索框
baidu.send_keys('Python3')
baidu.send_keys(Keys.BACK_SPACE) # 使用Keys.BACK_SPACE来模拟Backspace键其它

其它操作键盘的方法就不列举了,可以自己练习下,在导入Keys模块后就可以调用模块下所有封装好的方法:

4      警告框处理

现在几乎很多软件都会嵌入各种警示框,比如登陆验证出错会弹出警示框。对于这些弹出的警示框,webdriver也是提供了专门的方法,来处理这类软件警示框。

Webdriver通过switch_to.alert()方法来定位到警示框,并提供了如下对警示框的操作方法:

  1. 获取警示框文本信息:text
  2. 点击确认:accapt()
  3. 取消确认:dismiss()
  4. 输入值,如果警示框有提供输入框:send_keys()

比如如下一个登录页面,当输入不对的账号或者密码时,会弹出警示框

下面看看这些处理警示框的方法使用:

username = driver.find_element_by_id('loginUserName')
username.send_keys('')
password = driver.find_element_by_id('loginPassWord')
password.send_keys('')
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()

5      多窗口切换

有时我们需要打开多个浏览器窗口进行窗口切换,操作不同窗口,由于selenium-webdrvier只能在一个窗口中识别元素和对元素进行操作,如果想要操作另外一个窗口,就必须进行窗口切换。对此,webdriver也提供了这种多窗口切换的场景的实现方法。由于每个打开的窗口句柄是不同的,这样webdriver通过窗口句柄实现窗口切换。具体方法如下:

  1. current_window_handle      获取当前窗口句柄
  2. window_handle             返回所有打开窗口的句柄,返回的结果是一个列表
  3. switch_to.window(handle)     切换到指定窗口,参数handle为指定窗口的句柄

如下脚本以登录百度首页,并打开另一个窗口进入到注册页面,然后却换窗口到百度首页,进行搜索为例说明以上方法使用:

 '''
Code description:
Create time:
Developer:
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Ie()
driver.get('https://www.baidu.com/')
driver.maximize_window()
sreach_windows = driver.current_window_handle # 获取当前百度搜索窗口的句柄,是一个字符串
print(sreach_windows)
driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u'立即注册').click()
all_handles = driver.window_handles # 得到搜索页面和注册页面所有的窗口句柄,返回的是一个列表
print(all_handles)
# 进入到注册窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to.window(handle) # 切换到指定窗口
print("现在进入的是注册窗口")
driver.find_element_by_name('userName').send_keys('')
# 切换到搜索窗口
for handle in all_handles:
if handle == sreach_windows:
driver.switch_to.window(handle) # 切换到指定窗口
print("现在进入的是搜索窗口")
driver.find_element_by_id('TANGRAM__PSP_4__closeBtn').click() # 关闭注册窗口
driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()

6      设置等待时间

在测试过程中,我们编写的脚本往往很快执行完成,为了观察一些重要步骤的执行效果,我们可以在脚本中添加执行等待时间或者我们需要定位的元素页面短时间没法加载出来时,此时如果没有设置等待时间,脚本执行就会出错:元素不存在,这时我们设置等待时间就非常有必要了。对此,selenium-webdriver提供了Explicit Waits(显示等待)和Implicit Waits(隐性等待)两种模式的等待时间设置,另外python标准库模块time也提供了一种非智能的sleep()等待时间模式。

6.1    强制等待

Python标准库模块time提供强制等待设置,方法为sleep(),就是脚本执行过程中设置强制暂停脚本运行的时间间隔

6.2    隐性等待

设置隐性等待时间,由webdriver提供。隐性等待时间就是设置一个时间范围,有个最大响应时间,超时将会抛出异常。如下脚本,驱动打开IE浏览器,我们设置了最大打开等待时间是10s,也就是说可能2s时ie就开启,如果超过10s就会抛出异常。使用方法为:

driver.implicitly_wait(10)

6.3    显示等待

设置显示等待时间,由webdriver下的WebDriverWait模块提供。WebDriverWait()会配合until()和until_not()方法一起使用,根据判断条件而进行灵活进行处理时间等待问题,他会不断的根据你设定的条件去判断,直到超过你设置的等待时间,如果设置的条件满足,然后进行下一步操作,如果没有满足会报一个'selenium.common.exceptions.TimeoutException: Message: '错误。

如下脚本设置用户名输入框显示等待时间,并轮训判断该元素是否存在,如果判断在设置时间内没有则抛出异常:,如下使用方式:

Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换的更多相关文章

  1. Python3+Selenium2完整的自动化测试实现之旅(三):Selenium-webdriver提供的元素定位方法

    本篇以实例介绍selenium下的webdriver模块提供的定位页面元素(也可以称为对象)的方法和使用技巧,在此注意:在做WEB自动化测试前,需要对前端相关的技术有所了解,如HTML.XML.Xpa ...

  2. Python3+Selenium2完整的自动化测试实现之旅(一):自动化测试环境搭建

    1     环境搭建准备 (1)    下载Python3版本的安装包,直接官网下载即可:Python官网:https://www.python.org/ (2)    下载Python的基础工具包p ...

  3. Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现

    一.前言 前面系列Python3+Selenium2自动化系列博文,陆陆续续总结了自动化环境最基础环境的搭建.IE和Chrome浏览器驱动配置.selenium下的webdriver模块提供的元素定位 ...

  4. Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

    前言 之前的系列博客,陆续学习整理了自动化测试环境的搭建.IE和Chrome浏览器驱动的配置.selenium-webdriver模块封装的元素定位以及控制浏览器.处理警示框.鼠标键盘等方法的使用,这 ...

  5. Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用

    一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...

  6. Python3+Selenium2完整的自动化测试实现之旅(二):IE和Chrome浏览器驱动配置

    上一篇写了自动化测试需要的最基础环境配置,地址:https://www.cnblogs.com/tdp0108/p/10412073.html 当前市面上很多公司开发的应用软件都是BS架构,即基于浏览 ...

  7. Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动

    一.安装Python https://www.python.org/downloads/ 验证Python是否安装成功.打开Windows命令提示符(cmd),输入python,回车 注意:在安装的过 ...

  8. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  9. 爬虫(五)—— selenium模块启动浏览器自动化测试

    目录 selenium模块 一.selenium介绍 二.环境搭建 三.使用selenium模块 1.使用chrome并设置为无GUI模式 2.使用chrome有GUI模式 3.查找元素 4.获取标签 ...

随机推荐

  1. 我在B站投稿啦、、、

    我在B站投稿啦....欢迎评论交流... https://www.bilibili.com/video/av31539882/  怎样激活Win10系统修改windows系统账户的名称-mp4 外链: ...

  2. 20175324 2018-2019-2 《Java程序设计》第5周学习总结

    20175324 2018-2019-2 <Java程序设计>第5周学习总结 教材学习内容总结 抽象类和具体类的区别在于抽象类中有抽象方法而具体类中没有.且抽象类不能实例化. 接口:如果一 ...

  3. c++标准---for循环新用法

    贪吃蛇游戏的c++版本,从GitHub上clone下来的,在startinterface.cpp文件中有如下代码: void   StartInterface::PrintText() { for ( ...

  4. CentOS 编译安装 Redis (实测 笔记 Centos 7.3 + redis 3.2.8)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  5. JavaScript经典作用域问题(转载)

    题目 var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); ...

  6. echarts (geo/map) 渐变效果

    这两天帮人搞了下中国范围内仓库量统计的需求,查了下echarts 里的文档找到类似的demo(链接:https://ecomfe.github.io/echarts-examples/public/e ...

  7. 数组的初始化&缩窄转换

    1.初始化: 初始化就是在声明变量的同时给变量赋值,而不是声明后再赋值. 先声明,后赋值: int a; //先声明,由于没有初始化,所以当前a的值是变量a创建前,相应的内存单元中保留的值,是未知的 ...

  8. nginx参数 uri和request_uri讨论

    uri可以输出rewrite后的uri不带参数,要用args查看 request_uri 是请求的完整的uri带参数

  9. [Swift]LeetCode305. 岛屿的个数 II $ Number of Islands II

    A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...

  10. [Swift]LeetCode640. 求解方程 | Solve the Equation

    Solve a given equation and return the value of x in the form of string "x=#value". The equ ...