自动化开发测试(一)

什么是测试

通俗的来讲,程序测试就是运行程序,并发现程序的错误
专业的来讲,就是验证软件的正确性、完整性、安全性和质量的过程

测试的分类

1、按开发阶段划分:单元测试、集成测试、系统测试、验收测试
2、按是否查看代码划分:黑盒测试(功能,只关心软件中数据的输入输出)、白盒测试(逻辑测试,代码的测试)、灰盒测试(集成的测试)
3、按是否运行划分:静态测试、动态测试
4、按测试对象划分:性能测试、安全测试、兼容性测试、文档测试、业务测试、界面测试、安装测试、内存泄漏测试
5、按测试实施划分:α测试(在开发环境上测试,程序员自己测试)、β测试(验收测试,用户测试)、第三方测试
6、按是否手工执行划分:手工测试、自动化测试
7、其他分类:冒烟测试(针对不同版本的自测)、回归测试(修改代码后查看手否引入新问题)

采用架构

Python+Selenium

Selenium三剑客

selenium功能

1、测试与浏览器的兼容性
2、测试系统功能

三剑客

1、WebDriver
是客户端的API接口
测试人员通过调用这些接口,来访问数据库驱动,浏览器驱动再访问浏览器
远程测试
分布式测试
2、IDE
3、Grid

环境搭建

下载并安装Python

  1. 打开浏览器,输入https://www.python.org/,回车
  2. 选择Download
  3. 下拉,选择合适的版本,点击Download
  4. 下拉,选择合适的操作系统
  5. 点击下载
  6. 双击,点击安装
  7. 安装结束后,在命令提示符中输入pip install selenium,安装成功后,输入 pip list 查看是否真的成功
  8. 进入到安装目录下的Scripts路径下,将路径复制一下,放到环境变量–系统变量–path路径下

下载并安装PyCharm

  1. 打开浏览器,输入https://www.jetbrains.com/pycharm/download/#section=windows,回车
  2. 版本有企业版和社区版,个人使用社区版就ok了,点击Community下的Download
  3. 双击安装
  4. 安装完成后,将安装路径复制一下,放到环境变量–系统变量–path路径下

下载并安装驱动

  1. 打开浏览器,在帮助列表中,选择关于某个浏览器,查看当前浏览器所在版本
  2. 输入 https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/install_drivers/,回车
  3. 选择合适的浏览器,下载
  4. 下载完成后,解压缩,将chromedriver.exe或其他.exe文件复制到Python路径下

Selenium webDriver和浏览器之间是如何通信的

  1. 对于每一个脚本(客户端),一个HTTP请求就会被创建并发送给浏览器的驱动(服务器端)
  2. 浏览器驱动中含有一个HTTP Server,用来接收HTTP请求
  3. HTTP Server接收到请求后,具体操控对应的浏览器
  4. 浏览器执行具体的测试步骤
  5. 浏览器将测试的结果返回给浏览器驱动,浏览器驱动根据HTTP协议返回至Selenium脚本

注意:同一个驱动,为什么既可以接收Python请求,也可以接收Java请求?

因为WebDriver使用的协议是JSON Wrie protocol,通信的格式也是JSON

八大元素定位方法

id

find_element_by_id('id')

xpath

find_element_by_xpath('')

链接文本

find_element_by_link_text('文本信息')

部分链接文本

find_element_by_partial_link_text('部分文本信息')

标签名

find_element_by_tag_name('标签名')

name

find_element_by_name('name属性值')

css class

find_element_by_class_name('class属性值')

css选择器

find_element_by_css_selector('选择器')
**案例**
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 17:13
# 文件名称:demo01.py
# 开发人:HY
# 开发工具:PyCharm
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com')
        self.driver.maximize_window()

    def test_location(self):
        #针对id
        el_id =self.driver.find_element(by=By.ID,value='su')
        print(type(el_id))
        print('---')
        #针对超链接
        el_lt=self.driver.find_element(by=By.LINK_TEXT,value='新闻')
        print(el_lt.text)
        print('---')
        #针对超链接的模糊查询,可能会有多个结果出现
        el_plt=self.driver.find_element(by=By.PARTIAL_LINK_TEXT,value='地')
        print(el_plt.text)
        print('---')
        #针对name值,可能有多个相同的name,可以使用elements,返回一个列表
        el_name=self.driver.find_element(by=By.NAME,value='f')
        print(type(el_name))
        print('---')
        #针对标签名
        el_tagname=self.driver.find_elements(by=By.TAG_NAME,value='input')
        for el_tn in el_tagname:
            print(el_tn.text)
        print('---')
        #针对class属性
        el_cn=self.driver.find_element(by=By.CLASS_NAME,value='wrapper_new')
        print(type(el_cn))
        print('---')
        #针对属性选择器:选中属性,右键复制selector
        self.driver.find_element(by=By.CSS_SELECTOR,value='#kw').send_keys('baba')
        sleep(3)
        #针对xpath,基于树状结构使用
        #分为绝对路径和相对路径
        #绝对路径:从/html开始向下去找,下标从1开始
        #相对路径://查找元素标签名[@属性名='属性值']   ://input[@id='kw']
        #       //查找元素标签名[text()='文本']     ://input[text()='新闻']
        #//表示从根路径开始查,*表示查询所有元素://*
        #模糊查找://查找元素标签名[contains(text,'部分文本')] 或  查找元素标签名[contains(属性名,'部分属性值')]
        #       //input[contains(text,'新')]   或   //input[contains(id,'k')]
        print(self.driver.find_element(by=By.XPATH,value='//*[@id="s-top-left"]/a[4]'))
        print('---')
        self.driver.quit()



if __name__ == '__main__':
    case = TestCase()
    case.test_location()
**运行结果为:**
<class 'selenium.webdriver.remote.webelement.WebElement'>
---
新闻
---
地图
---
<class 'selenium.webdriver.remote.webelement.WebElement'>
---

















---
<class 'selenium.webdriver.remote.webelement.WebElement'>
---
<selenium.webdriver.remote.webelement.WebElement (session="1abff176c21f13d8ff9097c40dfa5e04", element="af3f9e67-7856-40a0-989c-b293de95e5a8")>
---

Process finished with exit code 0

WebDriver属性

浏览器名称

driver.name

当前url

driver.current_url

当前页面标题

driver.title

当前页面源码

driver.page.source

窗口句柄

driver.current_window_handle

当前窗口所有句柄

driver.window_handles
案例:
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 10:53
# 文件名称:demo.py
# 开发人:HY
# 开发工具:PyCharm
from selenium import webdriver
from time import sleep

# 实例化驱动

class TestCase(object):

    # 初始化方法
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()  #窗口最大化
    # 对自动化的简单测试案例

    def test(self):
        self.driver.find_element_by_id("kw").send_keys("Python")
        self.driver.find_element_by_id("su").click()
        sleep(5)
        self.driver.quit()

    # 对属性的测试
    def test_prop(self):
        print(self.driver.name)  #浏览器名称:chrome
        print(self.driver.current_url)  #当前url:https://www.baidu.com/
        print(self.driver.current_window_handle)  #窗口句柄:CDwindow-D16A526E45965F046DA0132901423210
        print(self.driver.window_handles) #当前窗口所有句柄:['CDwindow-D16A526E45965F046DA0132901423210']
        print(self.driver.title)  #当前页面标题:百度一下,你就知道
        print(self.driver.page_source)  #当前页面的源码:略
        self.driver.quit()


if __name__ == '__main__':
    case = TestCase()
    # case.test()
    case.test_prop()

WebDriver的方法:

back:返回上一个页面

	self.driver.back()  #返回上一个页面

refresh:刷新

	self.driver.refresh()  #刷新当前页面

forward;向前走

	self.driver.forward()  #前进

close与quit有什么区别

close只关闭当前tab;
quit会关闭浏览器,所有的tab都会关闭

WebElement有哪些属性:

测试站网址:http://sahitest.com/demo/ 提供了一些测试内容

  1. 标识:id
  2. 宽高:size
  3. 宽高和坐标:rect
  4. 标签名称:tag_name
  5. 文本内容:text
**案例:**
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 15:18
# 文件名称:demo02.py
# 开发人:HY
# 开发工具:PyCharm

from selenium import webdriver
from time import sleep


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://sahitest.com/demo/linkTest.htm')

    def test_WebElement_prop(self):
        e = self.driver.find_element_by_id('t1')
        print(type(e))  #e的类型:<class 'selenium.webdriver.remote.webelement.WebElement'>
        print(e.id)  #id:唯一 4dfa776d-184e-4be6-a853-bb687e146984
        print(e.rect)  #宽高和坐标  矩形框:{'height': 22, 'width': 703, 'x': 8, 'y': 539.9125366210938}
        print(e.size)  #宽高:{'height': 22, 'width': 703}
        print(e.tag_name)  #标签名:input
        print(e.text)  #文本:空



if __name__ == '__main__':
    case = TestCase()
    case.test_WebElement_prop()

WebElement有哪些方法:

  1. 输入内容:send_keys()
  2. 清空内容:clear()
  3. 单击:click()
  4. 获得属性值:get_attribute()
  5. 是否被选中:is_selected()
  6. 是否可用:is_enabled()
  7. 是否显示:is_displayed()
  8. css属性值:value_of_css_property()
**案例**
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 15:38
# 文件名称:demo03.py
# 开发人:HY
# 开发工具:PyCharm

from selenium import webdriver
from time import sleep

class TestCase(object):

    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://sahitest.com/demo/linkTest.htm')

    def test_webelement_method(self):
        e = self.driver.find_element_by_id('t1')   #拿到元素
        e.send_keys('好运来')    #输入内容
        sleep(2)
        print(e.get_attribute('type'))  #获得属性值
        print(e.value_of_css_property('font'))   # css属性值
        sleep(3)
        e.clear()  # 清空内容


if __name__ == '__main__':
    case = TestCase()
    case.test_webelement_method()

页面之间的切换

**案例**
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 15:54
# 文件名称:demo04.py
# 开发人:HY
# 开发工具:PyCharm
from selenium import webdriver
from time import sleep

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com/')


    def test_windows(self):
        self.driver.find_element_by_link_text('新闻').click()  #定位到新闻页面并点击跳转
        windows = self.driver.window_handles
        while 1:  # 永真,一直切换
            for window in windows:
                self.driver.switch_to.window(window)
                sleep(2)


if __name__ == '__main__':
    case = TestCase()
    case.test_windows()

form表单的处理

流程

  1. 定位表单元素
  2. 输入测试值
  3. 判断表单元素属性
  4. 获得表单元素属性
  5. 提交表单进行验证
**案例**
# _*_coding: UTF-8_*_
# 开发时间:2022/3/8 16:16
# 文件名称:demo05.py
# 开发人:HY
# 开发工具:PyCharm
import os.path
from selenium import webdriver
from time import sleep

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        path = os.path.dirname(os.path.abspath(__file__) )     #获取项目所在路径
        file_path ='file:///' +path+'/from01.html'   #获取文件所在路径
        self.driver.get(file_path)

    def test_login(self):
        username = self.driver.find_element_by_id('username')
        username.send_keys('zhangsan')
        password = self.driver.find_element_by_id('pwd')
        password.send_keys('123456')

        #获取用户名及密码的值
        print(username.get_attribute('value'))
        print(password.get_attribute('value'))
        sleep(3)
        self.driver.find_element_by_id('submit').click()




if __name__ == '__main__':
    case =TestCase()
    case.test_login()

alert还未执行结束,如果下面还有代码运行,会抛出异常,此时我们可以在alert执行代码下面加上这句话:

self.driver.switch_to.alert.accept()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值