selenium---自动化测试工具

稍微了解下自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。

常见的自动化测试工具:QTP、selenium、Rational Robot 、jmeter、appium、soapui、Loadrunner等等

自动化测试方法

  • 测试对象:UI、接口、代码
  • 测试过程:系统测试、集成测试、单元测试
  • 执行人员:测试人员、开发人员
    自动化测试可以在整个测试过程中任何一个阶段实施,前提功能相对稳定
    测试人员一般在系统测试时进行自动化测试

    集成测试阶段多进行自动构建、部署,以及冒烟测试的自动化
    在这里插入图片描述
    单元测试针对代码级别进行测试,可进行静态代码检查,或者执行单元测试用例,典型的框架比如junit,jmock等,该部分多由开发人员实施
  • UI自动化
    用例维护量大
    页面相关性强,必须后期介入
    UI测试适合与界面变动较小的项目
  • 接口自动化
    可在产品前期介入
    用例维护量小
    页面相关性小
    适合接口变动较小,界面变动频繁的项目

区分冒烟测试和回归测试

1.冒烟测试就是在一个新版本出来的时候,将软件的全部功能过一遍,看有没有什么大问题。如果功能可以正常运行,不会影响测试进行,那么这个版本就可以真正开始测试了。如果功能有重大问题或影响测试进行,那么这个版本就是不合格的,不用进行进一步的测试。

2.回归测试就是以前版本中发现的bug在新的版本中验证是否存在且是否引发新的bug。

自动化测试的适用对象

实施自动化测试的前提条件:需求变动不频繁、项目周期足够长、自动化测试脚本可重复使用
1、需求变动频繁的项目,自动化脚本不能重复使用,维护成本太大,性价比低
2、项目周期短,自动化脚本编制完成后使用次数不多,性价比低
3、交互型较强的项目,需要人工干预的项目,自动化无法实施

Selenium WebDriver的工作原理

参考

webdriver常用的API

元素的定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。
webdriver 提供了一系列的对象定位方法,常用的有以下几种:

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector
根据id定位

在这里插入图片描述

from selenium import webdriver  # 要想使用selenium 的webdriver 里的函数,首先把包导进来
import time  # 导入time包

browser = webdriver.Chrome()  # 选择操控的浏览器
browser.get("https://www.baidu.com")  # 进入百度搜索网址
time.sleep(2)
browser.find_element_by_id("kw").send_keys("java")  # 搜索框内输入java
browser.find_element_by_id("su").click()  # 点击搜索
time.sleep(5)
browser.quit()  # 关闭浏览器
根据name定位
browser.find_element_by_name("wd").send_keys("python")
根据class name定位

在这里插入图片描述

browser.find_element_by_class_name("s_ipt").send_keys("selenium")
通过link text定位

有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link text定位
在这里插入图片描述

browser.find_element_by_link_text("hao123").click()
通过 partial link text定位

通过部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例子,我可以只用链接的一部分文字进行匹配:

browser.find_element_by_partial_link_text("新").click()  # 点开新闻
根据tag name(标签名)定位
browser.find_element_by_tag_name("input").send_keys("罗马") #定位不到输入框,因为页面input太多了
通过xpath定位

XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可是使用这种强大语言在web 应用中定位元素。
在这里插入图片描述

browser.find_element_by_xpath("//*[@id='kw']").send_keys("古希腊")
通过css selector定位

CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略。
在这里插入图片描述

browser.find_element_by_css_selector("#kw").send_keys("css")

操作测试对象

鼠标点击:click()
模拟键盘输入:send_keys
清除输入框内容(可以的话)clear
获取元素的文本信息text
提交内容submit

browser.find_element_by_id("kw").send_keys("java")  # 模拟按键输入

browser.find_element_by_id("su").submit()  # 提交内容
time.sleep(1)
text = browser.find_element_by_id("s-bottom-layer-right").text
print(text)

等待

前提导入import time

time.sleep(3)

智能等待

broswer.implicitly_wait(5)

打印信息

打印tile及url

from selenium import webdriver
import time

broswer = webdriver.Chrome()
broswer.get("https://www.baidu.com")
broswer.find_element_by_id("kw").send_keys("java")  # 模拟按键输入
print(broswer.title)
print(broswer.current_url)
broswer.quit()

在这里插入图片描述
根据执行结果可以看到页面被正常打开了

浏览器操作

浏览器最大化browser.maximize_window()
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()
设置浏览器宽、高
browser.set_window_size(800, 800)# 设置浏览器宽高800,800
浏览器的前进与后退
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
time.sleep(2)
browser.back()# 浏览器后退
time.sleep(2)
browser.forward()# 浏览器前进
time.sleep(3)
browser.quit()
控制浏览器滚动条
from selenium import webdriver
import time
#访问百度
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
time.sleep(3)
driver.quit()

execute_script(script, *args),在当前窗口/框架同步执行javaScript

键盘事件

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("鹿鸣")
time.sleep(3)
browser.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')  # 相当于ctrl+A
time.sleep(2)
browser.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')   # 相当于ctrl+x
time.sleep(2)
browser.quit()

自动化登陆脚本:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get("http://127.0.0.1:88/biz/user-login-L2Jpei8=.html")
browser.implicitly_wait(10)
browser.find_element_by_id("account").send_keys("admin")
browser.implicitly_wait(10)
browser.find_element_by_id("account").send_keys(Keys.TAB)  # 换行
browser.implicitly_wait(10)
browser.find_element_by_name("password").send_keys("Lljh")
time.sleep(2)
browser.find_element_by_id("submit").click()
time.sleep(2)
browser.quit()

鼠标事件

ActionChains 类

  • context_click() 右击
  • double_click() 双击
  • drag_and_drop() 拖动
  • move_to_element() 移动
//登陆脚本
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time

browser = webdriver.Chrome()
browser.get("http://127.0.0.1:88/biz/user-login-L2Jpei8=.html")
browser.implicitly_wait(10)
t1 = browser.find_element_by_id("account")
t1.send_keys("admin")
time.sleep(5)
t2 = browser.find_element_by_name("password")
ActionChains(browser).move_to_element(t2).perform()  # 将鼠标从用户名框移动到密码框
t2.send_keys("Lljh")
browser.find_element_by_id("submit").click()
time.sleep(2)
browser.quit()

定位一组元素

定位一组对象一般用于以下场景:
批量操作对象,比如将页面上所有的checkbox 都勾上
先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

from selenium import webdriver
import time
import os

dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('../html/test.html')
dr.get(file_path)
# 选择页面上所有的input,然后从中过滤出所有的checkbox 并勾选之
inputs = dr.find_elements_by_tag_name('input')
# for input in inputs:
#     if input.get_attribute('type') == 'checkbox':
#
#         input.click()
inputs[1].click()  # 勾选数组下标为1的元素
time.sleep(2)
dr.quit()

多层框架/窗口定位

在这里插入图片描述

import time
import os

browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('../html/t2.html')
browser.get(file_path)
browser.implicitly_wait(30)
# 先找到到ifrome1(id = f1)

browser.switch_to.frame("f1")
# 再找到其下面的ifrome2(id =f2)
browser.switch_to.frame("f2")
# 下面就可以正常的操作元素了
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

下拉列表处理

通过脚本选择下拉列表里的$10.69

import os
import time

from selenium import webdriver

browser = webdriver.Chrome()
path = 'file:///' + os.path.abspath("../html/t4.html")
browser.get(path)
# 先定位到下拉框
# m=browser.find_element_by_id("ShippingMethod")
# # 再点击下拉框下的选项
# m.find_element_by_xpath("//option[@value='10.69']").click()
lists = browser.find_elements_by_tag_name("option")
lists[2].click()

上传文件操作

上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地窗口添加上传文件。

#coding=utf-8
from selenium import webdriver
import os,time
driver = webdriver.Chrome()
#脚本要与upload_file.html 同一目录
file_path = 'file:///' + os.path.abspath('upload.html')
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\PycharmProjects\\test\\upload.txt')
time.sleep(2)
driver.quit()

alert、confirm、prompt 的处理

  • text 返回alert/confirm/prompt 中的文字信息
  • accept 点击确认按钮
  • dismiss 点击取消按钮,如果有的话
  • send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错

unittest框架

python的单元测试框架
优点:

  1. 能够组织多个用例去执行
  2. 提供丰富的断言方法
  3. 提供丰富的日志与测试结果

UnitTest核心要素

  • test fixture
    初始化和清理测试环境,比如创建临时的数据库,文件和目录,其中setUp()和setDown()最常用方法。
  • test case
    单元测试用例,TestCase 是编写单元测试用例最常用的类
  • test suit
    单元测试用例的集合,TestSuite 是最常用的类
  • test runner
    执行单元测试
  • test report
    生成测试报告

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值