首页 > 编程语言 >python Selenium自动化测试

python Selenium自动化测试

时间:2023-04-09 17:47:07浏览次数:53  
标签:python driver selenium element 测试 自动化 Selenium find

转载自

https://blog.csdn.net/tangya3158613488/article/details/106902110

 

Selenium自动化测试

什么是自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行

结果。总的概括即:将人为驱动的测试行为转化为机器执行的过程。

进入今天的主角:selenium 学习功能测试自动化首选工具就是selenium,它是一个web自动化测试工具。

selenium的特点

支持多平台:IE、Chrome、Firefox、edge、Safari 支持多语言:Python、C、Java、C#、ruby、js 免费小巧,支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器执行,相当于分发机的功能。

 

自动化工具和自动化框架的区别

在学习selenium的过程中,我们写测试脚本需要使用unittest框架,这个框架提供的类或函数可以实现我们想要实现的测试功能。自动化测试框架一般可以分为两个层次,上层是管理整个自动化测试的开发,执行以及维护,在比较庞大的项目中,它体现重要的作用,它可以管理整个自动测试,包括自动化测试用例执行的次序、测试脚本的维护、以及集中管理测试用例、测试报告和测试任务等。下层主要是测试脚本的开发,充分的使用相关的测试工具,构建测试驱动,并完成测试业务逻辑。

自动化工具本片博客主要说的是selenium,除此之外,还有QTP、Rational Robot 、jmeter、appium、soapui、Loadrunner等等,以后有时间再去学习一下。工具主要的特点就是每个工具都有自己独特的操作界面供用户使用,selenium中的Selenium IDE就是自动化测试工具。

 

自动化测试适合适用什么项目,适合在什么时机做这种自动化合适?

自动化测试分为UI自动化测试和接口自动化测试。

UI自动化测试:适用于界面比较稳定的项目,前端开发完成之后,并且项目功能稳定。UI界面测试适合进行回归测试以及兼容性测试。

接口自动化测试:适用于后端开发完成,并且项目功能稳定;后端完成之后,就可以进行接口测试。做接口自动化的工具:soupUI、jmeter。

实施自动化测试的前提条件:需求变动不频繁、项目周期长、自动化测试脚本可以重复使用。

自动化适合的项目:产品型项目、机械并频繁的测试(比如兼容性测试)

 

自动化测试的优势

降低大型系统的由于变更或者多期开发引起的大量的回归测试的人力投入,这可能是自动化测试最主要的任务,特 别是在程序修改比较频繁时,效果是非常明显的,自动化测试前期人力投入较多,但后期进入维护期后,可节省大 量人力,而手工测试后期需要增加大量人力用于回归测试。

减少重复测试的时间,实现快速回归测试 创建优良可靠的测试过程,减少人为错误 可以运行更多更繁琐的测试 可以执行一些手工测试困难或不可能进行的测试 更好的利用资源 测试具有一致性和重复性 测试脚本的重用性

 

 

selenium的实现原理

Selenium主要有三个版本,分别是Selenium1.0,Selenium2.0,Selenium3.0

Selenium1.0:包括selenium IDE、selenium RC、selenium Grid(支持分布式)。Selenium1.0核心是selenium RC,所以Selenium1.0又称为Selenium RC,它是在浏览器中运用JavaScript应用,即用JavaScript代码获取页面上的任何元素并执行各种操作

Selenium2.0:核心是WebDriver,Selenium+WebDriver

 

WebDriver的原理:

(1)启动web浏览器,后台会同时启动基于Webdriver Wire协议的Web服务器作为selenium的远程服务器,并将其与浏览器绑定。绑定完成之后,服务器就开始监听客户端的操作请求。

(2)执行测试时,测试用例会作为客户端,将需要执行的页面操作请求以HTTP请求的方式发送给远程服务器。该HTTP请求的正文以Webdriver Wire协议规定的JSON格式来描述需要浏览器执行的具体操作。

(3)远程服务器接收到请求后,会对请求进行解析,并将解析结果发送给Webdriver,由Webdriver实际执行浏览器的操作。

(4)Webdriver可以看作是直接操作浏览器的原生组件,所以搭建测试环境时,通常需要先下载浏览器对应的WebDriver。

业界有一个形象的比喻来理解:乘客和出租车的例子。乘客就是客户端编写的测试脚本,司机就是我们的WedDriver,而出租车就是浏览器。

 

Selenium3.0:增加了edge 、Safari的原生驱动

学习Selenium主要就是学习WebDriver常用的API

 

常见API详解


#防止乱码
#coding = utf-8
#想使用selenium的webdriver里面的函数,首先需要把包导进来
from selenium import webdriver
import time
#我们需要操作的浏览器,这里使用的是谷歌浏览器,也可以是IE、Firefox
driver =webdriver.Chrome()
#访问百度首页
driver.get('http://www.baidu.com')
#停3秒钟
time.sleep(3)
#百度输入框的id为kw,我们需要在输入框中输入Selenium,用send_keys进行输入
driver.find_element_by_id("kw").send_keys("Selenium")
time.sleep(3)
#百度搜索框按钮id叫su,找到后调用click函数模拟点击操作
#和click有相同效果的是submit(),都可以用来点击按钮,submit主要是用于提交表单
driver.find_element_by_id("su").click()
time.sleep(3)
#退出并关闭窗口的每一个相关的驱动程序
driver.quit()

注意:关闭窗口主要有两种方法,分别是close和quit。close是关闭当前浏览器窗口,quit不仅关闭窗口,还会彻底的退出webdriver,释放driver server之间的连接,所以quit的关闭比close更彻底,它会更好的释放资源。

元素的定位 对页面元素进行定位是自动化测试的核心,我们要想操作一个对象,首先应该识别这个对象。在一个页面中,每个对象属性是唯一的我们需要用一系列的方式去定位我们要操作的对象。WebDriver提供了以下几种方法定位元素:

id
name
class name
link text
partial link text
tag name
xpath
css selector

 

下面我将对每种定位方法进行举例。

\#coding = utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
\######################百度输入框的定位方式#################
\#通过id定位
driver.find_element_by_id("kw").send_keys("selenium")
\#通过name定位
driver.find_element_by_name("wd").send_keys(u"CSDN博客") #u表示以utf-8的格式输入
\#通过tag name定位
driver.find_element_by_tag_name("input").send_keys("Python") #不能成功,因为input在这个页面有多个不唯一,无法定位到底是哪一个
\#通过class name定位
driver.find_element_by_class_name("s_ipt").send_keys("Java")
\#通过CSS定位
driver.find_element_by_css_selector("#kw").send_keys("C++")
\#通过xpath定位
driver.find_element_by_xpath("//*[@id=kw]").send_keys(u"C语言")
\#通过link test定位
driver.find_element_by_link_text("hao123").click()
\#通过partial link test定位
driver.find_element_by_partial_link_text("hao").click()
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

 

智能等待 前面说过等待可以引入time包,从而在脚本中自由的添加休眠时间 。但是有时候我们不想等待一个固定的时间,于是可以通过implicitly_wait()方法方便的实现智能等待,它在一个时间范围内智能等待。

selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)隐式等待一个元素被发现或一个命令完成,这个方法每次会话只需要调用一次time_to_wait

具体用法:

\# coding = utf-8
from selenium import webdriver
import time #调入time 函数
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.implicitly_wait(30) #智能等待30秒
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
browser.quit()

 

打印信息 使用print打印title和URL

\#coding = utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
print driver.title # 把页面title 打印出来
print driver.current_url #打印url
driver.quit()

浏览器的操作 浏览器的最大化 调用启动的浏览器不是全屏的,这样虽然不影响脚本的执行,但有时会影响我们观看脚本执行的变化。使用maximize_window()

\#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
print "浏览器最大化"
browser.maximize_window() #将浏览器最大化显示
time.sleep(2)
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
 

标签:python,driver,selenium,element,测试,自动化,Selenium,find
From: https://www.cnblogs.com/dzwj/p/17300663.html

相关文章

  • 多表查询和python操作mysql
    目录多表查询的两种方法方法1:连表操作方法2:子查询小知识点补充说明可视化软件NaviCat多表查询练习题1、查询所有的课程的名称以及对应的任课老师姓名2.查询平均成绩大于八十分的同学的姓名和平均成绩3.查询没有报李平老师课的学生姓名4.查询没有同时选修物理课程和体育课程的学生......
  • Python DeprecationWarning: executable_path has been deprecated, please pass in a
    借鉴https://blog.csdn.net/lly1122334/article/details/106217320https://blog.csdn.net/qq_57377057/article/details/128463296https://blog.csdn.net/tangya3158613488/article/details/106902110 将之前谷歌浏览器的105版本替换为110版本解决Python:DeprecationWar......
  • Python正则表达式
    本章将介绍Python中正则表达式,本文将会基于Python的标准库re模块讲解正则表达式。1、正则表达式的基本使用1.1、re.search(正则表达式,待匹配文本)我们可以使用re.search查询待匹配文本中是否存在可以匹配上的字符串,直接上例子。importrematch=re.search(r'pytho......
  • python-matplotlib库
    学习过程中跟着敲的代码:importmatplotlib.pyplotaspltfrommatplotlib.imageimportimreadplt.rcParams["font.sans-serif"]=['ArialUnicodeMS']#设置字体#plt.rcParams["axes.unicode_minus"]=False#该语句解决图像中的“-”负号的乱码问题#x=np.arange(-n......
  • python获取某单元格的行和列
    解决问题:在读取excel时,假如读取到了我想要的数据,则返回它所在的行和列importopenpyxl#打开Excel文件并选择工作表wb=openpyxl.load_workbook(r'D:\Users\72036454\Desktop\test.xlsx')sheet=wb['Sheet1']#遍历整个工作表,查找特定值target_value='hello'......
  • Navicat软件、python操作MySQL
    目录Navicat软件1.软件简介2.navicat基本操作python操作MySQL1.链接、执行sql、关闭(游标)2.查询结果3.增删改查4.使用pymysql写一个注册和登录的案例Navicat软件1.软件简介第三方开发的用来充当数据库客户端的简单快捷的操作界面 无论第三方软件有多么的花里胡哨,底层的本质还......
  • Python 操作 MongoDB
    Python操作MongoDB目录Python操作MongoDB1MongoDB简介1.1NoSQL的优点/缺点1.2使用MongoDB注意事项1.3MongoDB数据类型2MongoDB命令2.1基础命令2.2集合的增删改查2.2.1增加2.2.2查询2.2.3改2.2.4删除3python操作MongoDB1MongoDB简介MongoDB是一个基于分......
  • 【python】使用build模块进行简单打包分发
    build模块build模块是python3.6引入的一个简单的打包工具,和setuptools的区别是,build更加灵活简单,而setuptools提供了很多的高级功能,可以更加灵活的满足不同的项目需求   也就是说,build提供了一个简单的标准库级别的构建和打包工具,而setuptools更加强大安装buildpython......
  • 一文弄懂Python中的sort和sorted函数
    1.引言Python中的sort()和sorted()函数主要用于按升序或降序对数据进行排序。在本文中比较用于列表时,两个函数在编程和语法上的差异。闲话少说,我们直接开始吧!2.Sort()函数基本用法用于列表排序的sort函数的语法如下:list.sort(reverse=False,key=None)用法如下:参数reverse:默认为......
  • 21天掌握Python 3/21 编码
    如果输出中文字符 "你好,世界" Python有可能会碰到中文编码问题。Python文件中如果未指定编码,在执行过程会出现报错:#!/usr/bin/pythonprint("你好,世界")以上程序执行输出结果为:File"test.py",line2SyntaxError:Non-ASCIIcharacter'\xe4'infiletest.pyonline2,bu......