Selenium API汇总!
1、Selenium基础概念
Selenium是ThoughtWorks公司的一个强大的开源Web功能测试工具系列,采用Javascript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。
特点:
采用Javascript单元测试工具JSUnit为核心,只要在测试用例中把预期的用户行为和结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。
Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
selenium组件:
1)selenium IDE
2)selenium RC
3)selenium webdriver
4)selenium Grid
selenium RC 和 webdriver 的区别:RC需要调用服务,并非直接调用浏览器,性能也更慢一些。
2、Selenium API
1)浏览器驱动对象
```python
# 导入webdriver
from selenium import webdriver
#导入时间设置
from time import sleep
#创建一个浏览器对象
driver=webdriver.Chrome()
#设置全屏
driver.maximize_window()
#获取当前浏览器的尺寸
size = driver.get_window_size()
print(size)
#设置浏览器尺寸
driver.set_window_size(400, 400)
size=driver.get_window_size()
print(size)
#设置浏览器位置
position=driver.get_window_position()
print(position)
driver.set_window_position(x,y) #(x,y)水平向右平移x,垂直向下移y
#关闭浏览器
driver.close() #关闭当前标签/窗口
driver.quit() #关闭所有标签/窗口
2)页面操作
#访问百度
driver.get('https://www.baidu.com')
#刷新页面
driver.refresh()
#前进;后退页面
driver.forward()
sleep(5) #中间停顿5秒
driver.back()
3)获取断言信息
#获取当前访问页面url
url = 'http://www.baidu.com'
driver.get(url)
print(driver.current_url)
#获取当前浏览器标题
print(driver.title)
#保存快照(两种方式)
driver.get_screenshot_as_png()
driver.get_screenshot_as_file(file)
#网页源码
print(driver.page_source)
4)元素的定位
#定位到搜索框元素
el = driver.find_element_by_id('kw')
#向输入框输入数据
el.send_keys('selenium')
#提交(即回车键)
el.submit() /el.click()
#定位搜索按钮
el_click = driver.find_element_by_id('su')
el_click.click()
#清除文本
el.clear()
Selenium提供了8种定位方式:
id
name
class name
tag name
link text
partial link text
xpath
css selector
通过前端工具(如,firebug)查看,以此为例,
#通过id定位
driver.find_element_by_id('kw')
#通过name定位
driver.find_element_by_name('wd')
#通过class name定位
driver.find_element_by_class_name('s_ipt')
#通过tag name定位、
driver.find_element_by_tag_name('input')
通过css定位,按照上面顺序依次写成,
driver.find_element_by_css_selector('#kw')
driver.find_element_by_css_selector('[name=wd]')
driver.find_element_by_css_selector('.s_ipt')
driver.find_element_by_css_selector('html>body>form>span>input')
#通过link text定位
dr.find_element_by_link_text('新闻')
#通过partial link text定位
dr.find_element_by_partial_link_text('新')
注 : 获取一组,方法一样,将element改成elements。
5)鼠标操作
ActionChains类提供了鼠标操作的常用方法:
perform() 执行所有ActionChains中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.baidu.cn')
#定位到悬停的元素
above = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(above).perform()
6)键盘操作
from selenium import webdriver
#引入Keys模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
#输入框输入内容
driver.find_element_by_id('kw').send_keys('seleniumm')
#删除多输入的一个m
driver.find_element_by_id('kw').send_keys(keys.BACK_SPACE)
#输入空格键+‘selenium’
driver.find_element_by_id('kw').send_keys(keys.SPACE)
driver.find_element_by_id('kw').send_keys('selenium')
#ctrl+a 全选输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
#通过回车键来代替单击操作
driver.find_element_by_id('su').send_keys(Keys.ENTER)
driver.quit()
常用的键盘操作:
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(ctrl+a)
send_keys(Keys.CONTROL,‘c’) 复制(ctrl+a)
send_keys(Keys.CONTROL,‘c’) 粘贴(ctrl+a)
send_keys(Keys.CONTROL,‘v’) 剪切(ctrl+a)
send_keys(Keys.F1) 键盘F1
7)设置元素等待(显式等待;隐式等待)
显示等待使Webdriver等待某个条件成立时继续执行,否正在达到最大时长时抛出超时异常。
WebDriverWait(driver, timeout, poll_frequency=0.5,ignored_exceptions=None)
隐式等待
driver.implicitly_wait(10)
优先选择隐式等待
8)多表单/框架切换
#两种表达方式
driver.switch_to.frame('') / driver.switch_to_frame('')
9)多标签/窗口切换
#通过窗口的句柄进入的窗口
driver.switch_to.window(handle)
10)警告框处理
#获取当前页面的警告框,并接受/解散
driver.switch_to.alert.accept/dismiss()
11)下拉框操作
#导入Select类
from selenium.webdriver.support.select import Select
driver.select_by_value()
12)上传文件
#'路径'
driver.send_keys('')
13)调用JavaScript代码
JavaScript是一种流行的脚本语言,运行在浏览器中的解释型的编程语言,用来给HTML网页增加动态功能。
Selenium无操作滚动条的方法,一般操作滚动条都是使用js实现的。
#通过javascript设置浏览器窗口的滚动条位置
js = 'window.scrollTo(100, 450);'
driver.execute_script(js)
14)cookies操作
cookie,指某些网站为了辨别用户身份、进行会话保持而存储在用户本地终端上的数据。
为何使用cookies?
因为http是无状态协议,不对之前访问状态做管理,也就是说无法根据之前的登入状态进行本次访问的处理;没有状态管理就不能保持登录状态。
#selenium对cookies的操作
get_cookies() #获取所有cookies
add_cookie(cookie_dict) #设置cookies
delete_cookie(name) #删除指定名称的cookie
delete_all_cookies() #删除所有cookie
3、selenium API 简单封装:
selenium的API有很多,全部记忆也是过于负责,因此可以把常用的操作进行简单的封装。
1)封装开启关闭浏览器
2)封装定位操作
3)封装对元素的基本操作
from selenium import webdriver
import time
class Common(object):
#初始化
def __init__(self):
self.driver = webdriver.Chome()
#浏览器最大化
self.driver.maximize_window()
#访问指定url
def open_url(slef, url):
#获取url
self.driver.get(url)
#隐式等待10秒
self.driver.implicitly_wait(10)
#对定位的封装
def locateElement(self, locate_type, value):
el = None
if locate_type == 'id':
el = self.driver.find_element_by_id(value)
elif locate_type == 'name':
el = self.driver.find_element_by_name(value)
elif locate_type == 'class':
el = self.driver.find_element_by_class_name(value)
elif locate_type == 'tag':
el = self.driver.find_element_by_tag_name(value)
elif locate_type == 'text':
el = self.driver.find_element_by_link_text(value)
elif locate_type == 'partial':
el = self.driver.find_element_by_partial_link_text(value)
elif locate_type == 'xpath':
el = self.driver.find_element_by_xpath(value)
elif locate_type == 'css':
el = self.driver.find_element_by_css_selector(value)
#定位元素,返回
if el is not None:
return el
#对点击元素的封装
def click(self, locate_type, value):
#调用locateElement()
el = self.locateElement(locate_type, value)
#执行点击操作
el.click()
#直接对定位到的元素进行文本输入
def input_data(self, locate_type, value):
el = self.locateElement(locate_type, value)
#执行点击操作
el.send_keys(data)
#获取定位到元素的文本内容
def get_text(self, locate_type, value):
el = self.locateElement(locate_type, value)
return el.text
#获取定位到元素的标签属性
def get_attr(self, locate_type, value, datat):
el = self.locateElement(locate_type, value)
return el.get_attribute(data)
#结束清理
def __del__(self):
#等待5秒,关闭浏览器
time.sleep(5)
self.driver.quit()
if __name__ == '__main__':
com = Common()
com.open_url('http://ww.baidu.com')
com.input_data('id', 'kw', 'selenium')
com.click('id', 'su')
4. Selenium的原理:
包含三个部分:
1)浏览器
2)driver
3)client(也就是写的代码)
在selenium启动后,driver充当了服务器的角色,根client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应操作,并把执行结果返回给client。