zoukankan      html  css  js  c++  java
  • selenium+python+unittest实现自动化测试(入门篇)

    本文主要讲解关于selenium自动化测试框架的入门知识点,教大家如何搭建selenium自动化测试环境,如何用selenium+python+unittest实现web页面的自动化测试,先来看看selenium、unittest是什么。

    一、selenium、unittest概念

    Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试,同时支持所有基于web 的管理任务自动化。
    unittest是单元测试框架,不仅适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,断言,其实就是对测试结果进行校验,每一个测试用例都有一个期望结果,实际结果跟期望结果不一致,说明执行测试用例不通过,自动化测试也一样,需要对测试结果进行校验,校验成功,说明用例已经通过,最终生成测试结果。

    二、环境搭建:

    安装python:

    下载链接:https://www.python.org/getit/

    安装python编译器pycharm

    http://www.jetbrains.com/pycharm/download/index.html#section=windows

    安装selenium模块:

    win+r 输入cmd

    python -m pip install selenium

    假如用的是Chrome浏览器,还需要下载chromedriver.exe,chromedriver版本与支持的Chrome浏览器版本对应如下:
    在这里插入图片描述

    下载链接:http://npm.taobao.org/mirrors/chromedriver/

    下载完成后,拷贝chromedriver.exe到Chrome浏览器安装目录下:
    在这里插入图片描述
    随后配置环境变量:
    在这里插入图片描述

    三、编写一个简单的自动化测试脚本

    好了,环境已经搭建好了,我们开始写测试用例,来看一下对百度页面写一个简单的自动化测试脚本

    #coding=utf-8
    
    #百度demo
    from selenium import webdriver
    import time
    #单元测试框架,使用该模块,我们可以对用例进行组织和运行,例如如下的BaiduTestCase类继承unittest.TestCase,该类执行会把test开头的方法当成一个测试用例去执行
    import unittest
    class BaiduTestCase(unittest.TestCase):
        def setUp(self):
            print('开始执行测试用例:')
            url = 'https://www.baidu.com'
            self.driver = webdriver.Chrome()#选择谷歌浏览器
            self.driver.get(url)#打开百度页面
    
        def test_bubutton(self):
        	self.driver.find_element_by_id('kw').clear()
            self.driver.find_element_by_id('kw').send_keys('软件测试')#搜索框输入内容
            self.driver.find_element_by_id('su').click()#点击百度按钮
            time.sleep(2)
            self.driver.save_screenshot('D:/baidu.png')#截图
            
        def tearDown(self):
            print('一条用例执行完成。')
            self.driver.quit()#退出浏览器
            
    if __name__=='__main__':
        unittest.main()

    通过上面的一段代码我们就可以实现跳转到百度页面,输入‘软件测试’,点击百度按钮并且搜索,设置停留在搜索结果页面2秒钟,随后截图放到设置的路径,是不是觉得挺简单的呢,但是想要学习更多的自动化测试知识,还是需要更多地熟悉selenium、unittest的api。

    三、熟悉一些常用的元素定位方法、操作方法

    常用元素定位方法:

    1、id定位: find_element_by_id()
    举例:进入浏览器,按f12,定位元素id如下如步骤:
    在这里插入图片描述
    2、name定位: find_element_by_name()
    3、class定位:find_element_by_class_name()
    4、link定位:find_element_by_link_text()
    5、partial_link定位:find_element_by_partial_link_text()
    6、xpath定位:find_element_by_xpath()
    7、CSS定位:find_element_by_css_selector()
    操作方法:
    clear 清除元素的内容
    send_keys 模拟按键输入
    click 点击元素
    submit 提交表单
    size 获取元素的尺寸
    text 获取元素的文本
    get_attribute(name) 获取属性值
    location 获取元素坐标,先找到要获取的元素,再调用该方法
    page_source 返回页面源码
    driver.title 返回页面标题
    current_url 获取当前页面的URL
    is_displayed() 设置该元素是否可见
    is_enabled() 判断元素是否被使用
    is_selected() 判断元素是否被选中
    tag_name 返回元素的tagName
    context_click(elem) 右击鼠标点击元素elem,另存为等行为
    double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能
    drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放
    move_to_element(elem) 鼠标移动到一个元素上
    click_and_hold(elem) 按下鼠标左键在一个元素上
    perform() 在通过调用该函数执行ActionChains中存储行为
    send_keys(Keys.ENTER) 按下回车键
    send_keys(Keys.TAB) 按下Tab制表键
    send_keys(Keys.SPACE) 按下空格键space
    send_keys(Kyes.ESCAPE) 按下回退键Esc
    send_keys(Keys.BACK_SPACE) 按下删除键BackSpace
    send_keys(Keys.SHIFT) 按下shift键
    send_keys(Keys.CONTROL) 按下Ctrl键
    send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键
    send_keys(Keys.CONTROL,‘a’) 组合键全选Ctrl+A
    send_keys(Keys.CONTROL,‘c’) 组合键复制Ctrl+C
    send_keys(Keys.CONTROL,‘x’) 组合键剪切Ctrl+X
    send_keys(Keys.CONTROL,‘v’) 组合键粘贴Ctrl+V

    unittest常用断言方法:

    assertLocation(判断当前是在正确的页面)、
    assertTitle(检查当前页面的 title 是否正确)、
    assertValue(检查 input 的值, checkbox 或 radio,有值为”on”无为”off”)、
    ​ assertSelected(检查 select 的下拉菜单中选中是否正确)、
    ​ assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
    ​ assertText(检查指定元素的文本)、
    ​ assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
    ​ assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
    ​ assertAttribute(检查当前指定元素的属性的值)、
    ​ assertTable(检查 table 里的某个 cell 中的值)、
    ​ assertEditable(检查指定的 input 是否可以编辑)、
    ​ assertNotEditable(检查指定的 input 是否不可以编辑)、
    ​ assertAlert(检查是否有产生带指定 message 的 alert 对话框)、
    ​ verifyTitle验证预期的页面标题。
    ​ ​verifyTextPresent验证预期的文本是否在页面上的某个位置。
    ​ verifyElementPresent验证预期的 UI 元素,它的 HTML 标签的定义,是否在当前网页上。
    ​ verifyText核实预期的文本和相应的 HTML 标签是否都存在于页面上。
    ​ verifyTable验证表的预期内容。
    ​ waitForPageToLoad 暂停执行,直到预期的新的页面加载

  • 相关阅读:
    1.1 js 预解释(变量的提升,浏览器的加载机制)
    js 原型链详解
    ES6模块 与 CommonJS的差异
    export,import,export default,import()区别
    css权重优先级
    CSS3如何实现0.5边框
    JS 时间戳转换成具体时间
    http协议(二)请求和响应报文的构成
    http协议(一)一些基础知识
    mac homebrew  常用命令
  • 原文地址:https://www.cnblogs.com/xiaoneng/p/11658765.html
Copyright © 2011-2022 走看看