web自动化测试之selenium
一.selenium的常用操作
1)库的导入
from selenium import webdriver
2)创建浏览器对象
driver = webdriver.xxx()
使用dir(driver)查看方法
3)浏览器尺寸相关操作
maximize_window() 最大化
get_window_size() 获取浏览器尺寸
set_window_size() 设置浏览器尺寸
4)浏览器位置相关操作
get_window_position() 获取浏览器位置
set_window_position(x,y) 设置浏览器位置
注:显示器以左上角为(0,0),所有的位置操作都是相对于显示器左上角
展开的位移操作,单位是像素。
5)浏览器的关闭操作
close() 关闭当前标签/窗口
quit() 关闭所有标签/窗口
6)页面请求操作
driver.get(url) 请求某个url对应的响应
refresh() 刷新页面操作
back() 回退到之前的页面
forward() 前进到之后的页面
二.selen的断言
1.什么是断言
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
2.断言信息的操作
current_url 获取当前访问页面url
title 获取当前浏览器标题
get_screenshot_as_png() 保存图片
get_screenshot_as_file(file) 直接保存
page_source 网页源码
三.元素的定位
1.元素定位方法的分类(调用方式)
1.直接调用型(推荐方式)
driver.find_element_by_xxx(value)
2.使用By类型(需要导入By)
from selenium.webdriver.common.by import By
driver.find_element(By.xxx,value)
2.元素定位方法的分类
3.元素定位的八种定位方式
1. driver.find_element_by_xpath(value)
2. driver.find_element_by_css_selector(value)
3. driver.find_element_by_id(value)
4. driver.find_element_by_name(value)
5. driver.find_element_by_class_name(value)
6. driver.find_element_by_tag_name(value)
7. driver.find_element_by_link_text(value)
8 driver.find_element_by_partial_link_text(value)
4.元素的操作
对元素的相关操作,一般要先获取到元素,再调用相关方法
element = driver.find_element_by_xxx(value)
1)点击和输入
点击操作
element.click()
清空/输入操作(只能操作可以输入文本的元素)
element.clear() 清空输入框
element.send_keys(data) 输入数据
四.Selenium API高级
1.多标签之间的切换
场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,
而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。
1)获取所有窗口的句柄
handles = driver.window_handlers
调用该方法会得到一个列表,在selenium运行过程中的每一个窗口
都有一个对应的值存放在里面。
2)通过窗口的句柄进入的窗口
driver.switch_to_window(handles[n])
driver.switch_to.window(handles[n])
通过窗口句柄激活进入某一窗口
2.多表单切换
在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
1)什么是多表单?
实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
2)处理方法
直接使用id值切换进表单
driver.switch_to.frame(value)/driver.switch_to_frame(value)
定位到表单元素,再切换进入
el = driver.find_element_by_xxx(value)
driver.switch_to.frame(el) /driver.switch_to_frame(el)
3.弹出框操作
1) 进入到弹出框中
driver.switch_to.alert
2) 接收警告
accept()
3) 解散警告
dismiss()
4) 发送文本到警告框
send_keys(data)
4.鼠标和键盘操作
手动测试时键盘的操作在selenium页有实现,
关于鼠标的操作由ActionChains()类来提供,
关于键盘的操作由Key()类来提供
1)鼠标操作
* 导入动作链类,动作链可以储存鼠标的动作,并一起执行
from selenium.webdriver import ActionChains
ActionChains(driver)
* 鼠标右击
el = driver.find_element_by_xxx(value)
context_click(el)
对el执行右击
* 执行ActionChains中储存的所有动作
perform()
例如:
ActionChains(driver).context_click(ele).perform() 点击鼠标右键
ActionChains(driver). double_click(ele).perform() 点击鼠标左键
ActionChains(driver).move_to_element(el).perform() 鼠标悬停
2)键盘操作
键盘操作使用的是Keys类,一般配合send_keys使用
* 导入
from selenium.webdriver.common.keys import Keys
* 常用键盘操作
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)
3)键盘操作
* 常用键盘操作
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
案例:
必应搜索执行键盘操作
5.浏览器等待
1) 为什么要进行等待?
1.网速慢
2.网站内容过多
3.如果不进行等待而直接定位元素,可能会抛出异常
2) selenium中等待的分类:
显示等待
隐式等待
3) 显示等待
显示等待是根据条件进行等待,等待条件出现
实现:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,
默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置
时间检测不到则抛出异常。
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(
(By.CLASS_NAME,"g-hu")))
4)隐式等待
隐式等待是根据是件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素
都加载完成定就结束没有加载出元素就抛出 NosuchException.
优先 隐式等待 次之 显式等待 最次 固定等待
( ̄▽ ̄)~*------ ٩(๑❛ᴗ❛๑)۶谢谢阅读!!!!!!!!!!!!!!!