Web自动化测试系列—Selenium API

本文详细介绍Selenium自动化测试工具的使用,涵盖Selenium的基础概念、API操作、封装技巧及工作原理。通过实例演示如何利用Selenium进行浏览器操作、元素定位、等待策略等,为自动化测试工程师提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值