web自动化测试(自用)

本文详细介绍了Web自动化入门,包括自动化测试基础、SeleniumAPI操作(如元素定位、浏览器操作、鼠标键盘操作等)、单元测试框架(如unittest、fixture和参数化)以及PO模式、数据驱动和日志收集。此外,还涵盖了项目实战中的自动化测试流程和具体步骤。
摘要由CSDN通过智能技术生成

目录

第一章 Web自动化入门

1. 认识自动化及自动化测试




在这里插入图片描

2. 自动化测试工具选择



3. 环境搭建



浏览器驱动

驱动下载地址

selenium报错后

通过pycharm安装

科普path

# 导包
from time import sleep
from selenium import webdriver
# 获取浏览器驱动
driver = webdriver.Chrome()
# 打开百度网页
driver.get('http://www.baidu.com')
# 暂停三秒
sleep(3)
# 关闭浏览器驱动
driver.quit()

第二章 Selenium-API操作(重点)

1. 元素定位方式(八大:id,name.class_name,tag_name,link_text,partial_link_text,XPath,CSS)


定位方式

1. id定位



案例(打开百度,在输入框中输入元素定位后暂停三秒退出)

# 导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
# 获取浏览器驱动
driver = webdriver.Chrome()
# 打开百度网页
driver.get('http://www.baidu.com')
# 定位搜索框元素并输入“元素定位”
element = driver.find_element(By.ID, "kw").send_keys("元素定位")
# 暂停三秒
sleep(3)
# 关闭浏览器驱动
driver.quit()

1714100790906

2. name定位


4. class_name定位


5.tag_name定位(不常用)

  • link_text和partial_link_text(模糊)定位

6.XPath定位

· XPath介绍
· XPath定位策略(方式)
· XPath延申

7.CSS定位

· CSS介绍

· CSS定位策略(方式)

· XPath延申

XPath和CSS区别

2. 元素和浏览器的操作方法

元素操作(案例)

  • 打开百度网页
  • 点击登录按钮,打开登录页面
  • 输入手机号/用户名/邮箱,输入密码
  • 勾选同意协议,点击登录
  • 清除手机号/用户名/邮箱,重新输入手机号/用户名/邮箱
  • 关闭浏览器驱动
from time import sleep
from selenium import webdriver
# 获取浏览器驱动
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 打开百度网页
url = 'http://www.baidu.com'
driver.get(url)
# 点击登录按钮打开登录页面
driver.find_element(By.LINK_TEXT,'登录').click()
sleep(1)
# 输入手机号/用户名/邮箱
driver.find_element(By.CSS_SELECTOR, 'input[placeholder="手机号/用户名/邮箱"]').send_keys('15513962114')
sleep(1)
# 输入密码
driver.find_element(By.CSS_SELECTOR,'input[placeholder="密码"]').send_keys('WHNXLX')
sleep(1)
# 勾选同意协议
driver.find_element(By.ID,'TANGRAM__PSP_11__isAgree').click()
sleep(1)
# 点击登录
driver.find_element(By.ID,'TANGRAM__PSP_11__submit').click()
sleep(2)
# 清除手机号/用户名/邮箱
driver.find_element(By.CSS_SELECTOR, 'input[placeholder="手机号/用户名/邮箱"]').clear()
sleep(1)
# 重新输入手机号/用户名/邮箱
driver.find_element(By.CSS_SELECTOR, 'input[placeholder="手机号/用户名/邮箱"]').send_keys('13534762114')
sleep(2)
# 关闭浏览器驱动
driver.quit()

QQ录屏20240430165601

浏览器常用API

案例
  • 获取浏览器驱动
  • 打开百度网页
  • 改变位置,改变大小,最大化浏览器
  • 点击壁纸,点击知道,回退,前进
  • 关闭浏览器驱动
from time import sleep
from selenium import webdriver
# 获取浏览器驱动
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 打开百度网页
url = 'https://image.baidu.com/'
driver.get(url)
sleep(1)
# 改变位置
driver.set_window_size(200,300)
sleep(1)
# 改变大小
driver.set_window_position(200,300)
sleep(1)
# 最大化浏览器
driver.maximize_window()
sleep(1)
# 点击壁纸
driver.find_element(By.PARTIAL_LINK_TEXT,'壁纸').click()
sleep(1)
# 点击知道
driver.find_element(By.PARTIAL_LINK_TEXT,'知道').click()
sleep(1)
# 回退
driver.back()
# 前进
driver.forward()
# 关闭浏览器驱动
driver.quit()

QQ录屏20240430210618

获取元素信息常用API

3. 鼠标和键盘操作

> 鼠标操作

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 打开百度网页
url = 'https://baidu.com/'
driver.get(url)
sleep(1)
# 最大化浏览器
driver.maximize_window()
sleep(1)
# 实例化并获取ActionChains
active = ActionChains(driver)
# 右击
active.context_click().perform()
sleep(1)
# 双击
active.context_click(driver.find_element(By.ID,'form')).perform()
sleep(1)
#悬停
active.move_to_element(driver.find_element(By.CSS_SELECTOR,'span[name="tj_settingicon"]')).perform()
sleep(1)
driver.close()
# 关闭浏览器驱动
#driver.quit()

> 键盘操作


4.元素等待(重点:显示等待)


5.下拉选择框

> CSS定位

> Select选择框

6.弹出框


7.滚动条操作

8.frame表单操作(重要)

9.多窗口切换(重要)

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
# 打开新浪网页
url = 'https://www.sina.com.cn/'
driver.get(url)
# 最大化浏览器
driver.maximize_window()
sleep(1)
# 隐式等待
#driver.implicitly_wait(5)
# 获取当前页面句柄
current_handle = driver.current_window_handle
# 点击切换女性页面
driver.find_element(By.PARTIAL_LINK_TEXT,'女性').click()
sleep(2)
# 获取所有页面句柄
handles = driver.window_handles
for h in handles:
    # 判断是否为当前页面句柄,不是则切换
    if h != current_handle:
        # 切换
        driver.switch_to.window(h)
driver.find_element(By.PARTIAL_LINK_TEXT, '护肤').click()
sleep(2)
driver.close()
# 关闭浏览器驱动
driver.quit()

10.窗口截图( 失败截图

11.验证码处理

第三章 UnitTest框架

1. UnitTest基本使用

> 基本要素

> 切换测试框架

1.1 TestCase


# UniTest框架——TestCase
# 1 导包
import unittest
# 2 编写求和函数
def add(x, y):
    return x + y
# 3 定义测试类并继承
class Test_01(unittest.TestCase):
    # 4 定义测试方法(注意以test开头)
    def test01(self):
        result = add(1, 2)
        print("结果为:",result)

    def test02(self):
        result = add(2, 2)
        print("结果为:",result)

结果:

1.2 TestSuite 和 TextTestRunner

# UniTest框架——TestSuite
# 1 导包
import unittest
from testcase import Test_01
# 2 实例化对象获取TestSuite对象
suite = unittest.TestSuite()
# 3.a调用ddTest添加测试用例
# 方法1 类名(“方法名”)
# suite.addTest(Test_01("test01"))
# suite.addTest(Test_01("test02"))
# 方法2 unittest.makeSuite(类名)
suite.addTest(unittest.makeSuite(Test_01))

# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)


1.3 TestLoader(只用这个基本)

# UniTest框架—— TestLoader
# 1 导包
import unittest
from testcase import Test_01
# 2 调用TestLoader下的discover方法
suite = unittest.TestLoader().discover("./", pattern='test*.py')
# 3 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

结果:

2.Fixture(装置)

# UniTest框架——Fixture

import unittest
# 3 模块级别
def setUpModule():
    print("setUpModule")

def tearDownModule():
    print("tearDownModule")


class Test_02(unittest.TestCase):
    # 2 类级别
    @classmethod
    def setUpClass(cls):
        print("开始类级别")

    @classmethod
    def tearDownClass(cls):
        print("结束类级别")

    # 1 函数级别
    def setUp(self):
        print("开始")
    def tearDown(self):
        print("结束")

    def test01(self):
        print("test01")

    def test02(self):
        print("test02")

结果:

3. UnitTest断言

> 练习

import time
import unittest
from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By


class TestCase(unittest.TestCase):
    # >定义初始化方法
    def setUp(self) -> None:
        # 获取驱动
        self.driver = webdriver.Chrome()
        # 打开浏览器
        url = "https://www.baidu.com"
        self.driver.get(url)
        sleep(1)
        # 最大化页面
        self.driver.maximize_window()
        # 隐式等待
        self.driver.implicitly_wait(3)
        pass
    def tearDown(self) -> None:
        sleep(2)
        self.driver.quit()
        pass
    def test_login(self):
        self.driver.find_element(By.PARTIAL_LINK_TEXT,'登录').click()
        self.driver.find_element(By.ID,'TANGRAM__PSP_11__userName').send_keys('13592554912')
        self.driver.find_element(By.NAME,'isAgree').click()
        self.driver.find_element(By.ID, 'TANGRAM__PSP_11__submit').click()
        sleep(1)
        result = self.driver.find_element(By.ID,'TANGRAM__PSP_11__error').text
        print("结果为:", result)
        # 预期结果
        except_result = "请您输入密码"
        # 断言
        try:
            self.assertEqual(result,except_result)
        except  AssertionError:
            self.driver.get_screenshot_as_file("./image/{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S")))
            # 捕获异常
            raise

成功通过结果:

失败结果为:在这里插入图片描述
重点

断言拓展——python自带断言

4. 参数化

> 下载包

> 案例

'''
步骤:
    1.导包from parameterized import parameterized
    2.修饰测试函数@parmeterized.expand(列表类型数据)
    3.在测试函数中使用变量接收,传递过来的值。
语法:
    1.单个参数:值为列表
    2.多参数:值为列表嵌套元组如:[(1,2,3),(2,3,4)]
'''
import unittest

from parameterized import parameterized

class TestCase(unittest.TestCase):
    # # 单个参数
    # @parameterized.expand([1,2,3])
    # def test_01(self,num):
    #     print(num)

    # # 多个参数
    # @parameterized.expand([(1,2,3),(2,3,5)])
    # def test_01(self, a,b,c):
    #     print("{}+{}={}".format(a,b,c))

    # data = [(1, 2, 3), (2, 3, 5)]
    # @parameterized.expand(data)
    # def test_01(self, a,b,c):
    #      print("{}+{}={}".format(a,b,c))

    def get_data(self):
        return [(1, 2, 3), (2, 3, 5)]
    @parameterized.expand(get_data(True))
    def test_01(self, a, b, c):
        print("{}+{}={}".format(a, b, c))

结果:

import unittest

from parameterized import parameterized


def addtest(a, b):
    return a+b
def get_data():
    return [(1,2,3),(2,3,5)]
class TestCase(unittest.TestCase):
    @parameterized.expand(get_data())
    def test_01(self,a,b,except_result):
        # 断言
        assert addtest(a,b) == except_result

结果:

5.unittest跳过方式

6.生成HTML测试报告

'''
    目标:基于单元测试框架执行生成HTML版报告操作:
        1.复制HtmLTestRunner.py文件到指定目录
        2.导包from HTMLTestRunner import HTMLTestRunner
        3.获取报告存放文件流,并实例化HTIMLTestRunner类,执行run方法
'''
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
# 定义测试套件
suite = unittest.defaultTestLoader.discover("./",pattern='test*.py')
# 定义报告存放路径或文件名
report_dir = "./report/{}.html".format(time.strftime("%Y_%m_%d_%H_%M_%S"))
with open(report_dir,"wb") as f:
    HTMLTestRunner(stream=f,title="test报告",description="操作系统windows10").run(suite)

with open


第四章 PO模式

1. V1

不能批量执行

# 导包
from time import sleep
from selenium import webdriver
# 获取driver对象
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
driver.get("https://www.baidu.com/")
# 点击登录
driver.find_element(By.LINK_TEXT,'登录').click()
sleep(1)
# 输入手机号/用户名/邮箱
driver.find_element(By.CSS_SELECTOR, 'input[placeholder="手机号/用户名/邮箱"]').send_keys('15513962114')
sleep(1)
# 输入密码
driver.find_element(By.CSS_SELECTOR,'input[placeholder="密码"]').send_keys('WHNXLX')
sleep(1)
# 勾选同意协议
driver.find_element(By.ID,'TANGRAM__PSP_11__isAgree').click()
sleep(1)
# 点击登录
driver.find_element(By.ID,'TANGRAM__PSP_11__submit').click()
sleep(2)
# 获取提示信息
msg = driver.find_element(By.CSS_SELECTOR,'[id="TANGRAM__PSP_11__error"]').text
print(msg)
# 断言
assert msg == '用户名或密码有误,请重新输入或找回密码'
# 关闭浏览器驱动
driver.quit()
driver.close()

1. 方法封装

2. PO模式介绍

3. PO模式实战

第五章 数据驱动

1. JSON读写

2. 数据驱动介绍

3. 数据驱动实战

第六章 日志收集

1. 日志相关概念

2. 日志的基本方法

3. 日志的高级方法

第七章 项目实战

1. 自动化测试流程

2. 项目实战演练

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King✪ω✪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值