一、浏览器的控制
Selenium-webdriverAPI提供了对页面元素定位和操作方法外,还提供了对浏览器本身的操作,如浏览器前进、后退、刷新、关闭、浏览器窗口大小设置等
名称 | 方法 | 示例 | 说明 | |
打开浏览器 | driver=webdriver.Chrome() driver=webdriver.Firefox() |
打开谷歌浏览器: driver=webdriver.Chrome() 或者,如果不执行驱动安装,可以代码指定驱动。详细见 环境安装篇 driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe") |
||
设置浏览器大小 | set_window_size(width,height),第一个参数为宽度,第二个参数为高度 | 如将浏览器窗口设置成移动客户端的大小1208*750,代码如下: driver. set_window_size(1208,750) |
||
最大化浏览器 | maximize_window() | driver.maximize_window() | ||
浏览器后退 | back() | driver.back() | ||
浏览器向前 | forward() | driver.forward() | ||
退出当前页 | close() | driver.close() | ||
退出所有页 | quit() | driver.quit() | ||
获取页面title,url,源码 | #获取页面title,url,源码 print(driver.title) print(driver.current_url) print(driver.page_source) |
|||
刷新浏览器 | refresh() | driver.refresh() | ||
二、操作Cookie
名称 | 方法 | 示例 | 说明 |
获取浏览器所有的cookie信息 | get_cookies() | driver.get_cookies() | |
获取cookie数据中属性键值name的值的cookie信 | get_cookie(name) | driver.get_cookie("UserLogin") | |
添加cookie | add_cookie(cookie_dict) | driver.add_cookie("{'UserLogin': User, 'a': 2, 'b': '3'}") | 由于我们知道cookie存放数据是以字典的形式,故添加cookie时必须是键值对形式 |
删除cookie | delete_cookie(cookie_dict) | driver.delete_cookie("UserLogin") | |
删除所有的浏览器cookie信息 | delete_all_cookies() | driver.delete_all_cookies() |
三、鼠标控制
在浏览网页是电脑和我们交互的就是鼠标和键盘了,也是我们操作最多的。鼠标在现在的网页上已经有诸多操作,如单击、右击、双击、悬浮、拖拽等操作;键盘用于输入,有诸多输入键,如enter、backspace、空格等以及诸多组合键的使用。Webdriver对于鼠标和键盘也实现了比较多和详细的模拟实现方式,主要由webdriver中封装的ActionChains类实现。ActionChains类主要提供了鼠标的右键、双击、悬浮、拖拽等方法
名称 | 方法 | 示例 | 说明 |
右击 | context_click() | # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Ie() driver.get('https://pan.baidu.com') ''' 中间省略N多代码行 ''' # 定位到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() |
|
双击 | double_click() | ActionChains(driver).double_click(PyCharm).perform() | |
悬浮 | move_to_element() | account= driver.find_element_by_xpath('//*[@id="layoutHeader"]/div/div/dl/dd[2]/span') # 定位到账户位置 ActionChains(driver).move_to_element(account).perform() |
|
拖拽 | drag_and_drop() | pesition1 = driver.find_element_by_xpath('//*[@id="layoutHeader"]') # 定位元素A的位置 |
四、键盘控制
常用的键盘操作有:enter、backspace、ctrl+c、ctrl+v、F5等,keys模块都是有方法的。使用过键盘输入的方法send_keys()
示例:如模拟backspace键,打开百度,输入Python3,然后在Backspace去掉3这个数字,再百度搜索
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键其它
五、警告框处理
很多软件都会嵌入各种警示框,比如登陆验证出错会弹出警示框。对于这些弹出的警示框,webdriver也是提供了专门的方法,来处理这类软件警示框。
Webdriver通过switch_to.alert()方法来定位到警示框,并提供了如下对警示框的操作方法:
获取警示框文本信息:text
点击确认:accapt()
取消确认:dismiss()
输入值,如果警示框有提供输入框:send_keys()
示例:比如如下一个登录页面,当输入不对的账号或者密码时,会弹出警示框
下面看看这些处理警示框的方法使用:
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-webdrvier只能在一个窗口中识别元素和对元素进行操作,如果想要操作另外一个窗口,就必须进行窗口切换。对此,webdriver也提供了这种多窗口切换的场景的实现方法。由于每个打开的窗口句柄是不同的,这样webdriver通过窗口句柄实现窗口切换。具体方法如下:
current_window_handle 获取当前窗口句柄
window_handle 返回所有打开窗口的句柄,返回的结果是一个列表
switch_to.window(handle) 切换到指定窗口,参数handle为指定窗口的句柄
示例:如下脚本以登录百度首页,并打开另一个窗口进入到注册页面,然后却换窗口到百度首页,进行搜索为例说明以上方法使用:
# -*- 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('123')
# 切换到搜索窗口
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')
七、设置等待时间
在测试过程中,我们编写的脚本往往很快执行完成,为了观察一些重要步骤的执行效果,我们可以在脚本中添加执行等待时间或者我们需要定位的元素页面短时间没法加载出来时,此时如果没有设置等待时间,脚本执行就会出错:元素不存在,这时我们设置等待时间就非常有必要了。对此,selenium-webdriver提供了Explicit Waits(显示等待)和Implicit Waits(隐性等待)两种模式的等待时间设置,另外python标准库模块time也提供了一种非智能的sleep()等待时间模式。
1、强制等待
Python标准库模块time提供强制等待设置,方法为sleep(),就是脚本执行过程中设置强制暂停脚本运行的时间间隔
2、显示等待
设置显示等待时间,由webdriver下的WebDriverWait模块提供。WebDriverWait()会配合until()和until_not()方法一起使用,根据判断条件而进行灵活进行处理时间等待问题,他会不断的根据你设定的条件去判断,直到超过你设置的等待时间,如果设置的条件满足,然后进行下一步操作,如果没有满足会报一个'selenium.common.exceptions.TimeoutException: Message: '错误。
如下脚本设置用户名输入框显示等待时间,并轮训判断该元素是否存在,如果判断在设置时间内没有则抛出异常:,如下使用方式:
def userLogin():
driver=webdriver.Ie()
driver.get(url)
driver.maximize_window()
#显示等待
username= WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"username")), "等待超时异常提示信息")
username.send_keys("admin")
driver.quit()
3、隐性等待
设置隐性等待时间,由webdriver提供。隐性等待时间就是设置一个时间范围,有个最大响应时间,超时将会抛出异常。如下脚本,驱动打开IE浏览器,我们设置了最大打开等待时间是10s,也就是说可能2s时ie就开启,如果超过10s就会抛出异常。使用方法为:
driver.implicitly_wait(10)
def userLogin():
driver=webdriver.Ie()
driver.implicitly_wait(10) #设置隐性等待,时间范围为0到10秒
driver.get(url)
driver.maximize_window()
username=driver.find_element_by_id("username")