五、web自动化测试01

news2025/4/25 12:06:44

目录

  • 一、HTML基础
    • 1、HTML介绍
    • 2、常用标签
    • 3、基础案例
      • 3.1 前端代码
      • 3.2 自动化测试
  • 二、CSS定位
    • 1、css介绍
    • 2、案例
    • 3、代码优化
  • 三、表单自动化
    • 1、案例
    • 2、元素属性定位
  • 四、后台基础数据自动化
    • 1、登录
      • 1.1 id与class定位
      • 1.2 定位一组元素
    • 2、商品新增

一、HTML基础

可参考学习
链接: 测试基础day04–HTML基础

1、HTML介绍

  • web前端三大核心技术
    • HTML:负责网页的架构
    • CSS:负责网页的样式、美化
    • JS:负责网页的行为
  • HTML:HTML 是用来描述网页的一种语言。
  • HTML标签:
    • 单标签:
    • 双标签: 内容
  • 标签属性:
    • 属性格式:属性名=“属性值”
    • 示例:京东

2、常用标签

  • 骨架标签:
    • html
    • head
      • title
    • body
  • 标题标签: h1~h6, 数字越小、字体越大
  • 段落标签: p
  • 超链接: a
    • href:跳转地址
    • target:新窗口打开
  • 图片标签: img
    • src:图片路径
    • title:光标悬停显示文字
    • alt:图片未加载时显示文字
    • width:图片宽度
    • height:图片高度
  • 换行: br
  • 空格: & nbsp;
  • 布局标签:
    • div
    • span
  • 列表标签
    • 有序列表: ol
    • 无序列表: ul
    • 列表项: li
  • 表单标签: form
    • 文本框:
    • 密码框:
    • 单选框:
      • 提醒:name值相同为一组,实现单选效果
    • 复选框:
    • 按钮:
      • 普通按钮:
      • 重置按钮:
      • 提交按钮:

3、基础案例

在这里插入图片描述

3.1 前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML基础</title>
</head>
<body>
    <form action="https://hmshop-test.itheima.net/">
       用户名:<input type="text" id="username"><br>
       密码框:<input type="password" id="password"><br>
       性别:<input type="radio" name="sex"><input type="radio" name="sex"><br>
       你的爱好:<input type="checkbox">吃饭<input type="checkbox">睡觉<input 
type="checkbox">学习<br>
       访问百度:<a href="https://www.baidu.com">百度</a><br>
       访问黑马:<a href="https://www.itcast.cn" target="_blank">黑马</a><br>
       你的靓照:<img src="坚持.webp" alt="" width="200" height="200"> <br>
       软件测试按照阶段划分为:<br>
        <ol>
        <li>单元测试</li>
            <li>集成测试</li>
            <li>系统测试</li>
            <li>验收测试</li>
        </ol><br>
       软件测试按照代码可见度划分为:<br>
        <ul>
            <li>黑盒测试</li>
            <li>白盒测试</li>
            <li>灰盒测试</li>
        </ul><br>
        <input type="button" value="普通按钮">
        <input type="reset" value="重置按钮">
        <input type="submit" value="提交按钮">
    </form>
</body>
</html>

3.2 自动化测试

# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开浏览器
driver = webdriver.Chrome()
driver.maximize_window()

# 打开网页
driver.get(r"C:\Users\Jack\Desktop\day05\test02_hello_html.html")

# 页面操作
driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13412345678")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "body > form > input[type=radio]:nthchild(5)").click()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,
"body > form > input[type=checkbox]:nthchild(8)").click()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,
"body > form > input[type=checkbox]:nthchild(9)").click()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,
"body > form > input[type=submit]:nthchild(26)").click()

#退出浏览器
time.sleep(3)
driver.quit()

二、CSS定位

1、css介绍

  • CSS:(Cascading Style Sheets)是一种语言,用来描述HTML元素的显示样式。
  • 选择器:一种表达式,可以找到HTML中的标签元素。
  • CSS定位:selenium利用选择器定位元素的定位方式。
  • 方法:driver.find_elements(By.CSS_SELECTOR, 选择器表达式)
    • 定位策略:
      • ID选择器: #id属性值
      • 类选择器:
        • .class属性值
        • .class属性值1.class属性值2
      • 属性选择器:
        • 全部属性: [属性名=属性值]
        • 局部属性: [属性名*=局部属性值]
      • 层级选择器:
        • 父子关系: 标签1>标签2
        • 后代关系: 标签1 标签2
  • 原则:
    • 优先使用ID属性(唯一性)
    • 没有ID看class属性(class多值时可以级联)
    • 没有ID没有class属性,使用其他任意能唯一定位元素的属性
    • 属性定位不到元素时,使用层级+属性进行元素定位

2、案例

在这里插入图片描述

用户名:#username
密码:#password
验证码:#verify_code
登录:.J-login-submit

# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开浏览器
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()

# 打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")

# 页面操作(找元素 + 元素操作)
# 用户名:#username
driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13488888888")
# 密码:#password
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 验证码:#verify_code
driver.find_element(By.CSS_SELECTOR, "#verify_code").send_keys("8888")
# 登录:.J-login-submit
driver.find_element(By.CSS_SELECTOR, ".J-login-submit").click()

# 等待5秒
time.sleep(5)

# 退出浏览器
driver.quit()

3、代码优化

  • 需求:

    • ① 在tools包中,创建模块chromeDriver, 定义函数get_driver():
      实现用户输入不同的url信息,返回一个driver对象
    • ② 在模块chromeDriver中, 定义函数quit_driver():
      实现用户对传入的driver进行退出操作。
    • ③ 在scripts包中导入get_driver()和quit_driver()来实现登录成功
  • 定义函数

# tools/chromeDriver.py
# 导包
import time
from selenium import webdriver

# 定义函数:接受不同url,返回driver对象
def get_driver(url):
    # 创建浏览器
    driver = webdriver.Chrome()
    driver.maximize_window()
    # 访问页面
    driver.get(url)
    # 返回浏览器驱动对象
    return driver
    
# 定义函数:接受driver并实现退出浏览器
def quit_driver(driver):
    # 退出浏览器
    time.sleep(3)
    driver.quit()
  • 调用函数
# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver,quit_driver

# 页面操作
driver = get_driver("https://hmshop-test.itheima.net/Home/user/login.html")
# 用户名:#username
driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13488888888")
# 密码:#password
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 验证码:#verify_code
driver.find_element(By.CSS_SELECTOR, "#verify_code").send_keys("8888")
# 登录:.J-login-submit
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, ".J-login-submit").click()

# 退出浏览器
quit_driver(driver)

在这里插入图片描述

三、表单自动化

1、案例

在这里插入图片描述

手机号码:#username
图像验证码:[name=‘verify_code’]
设置密码:#password
确认密码:#password2
推荐人手机:[name=‘invite’]
同意协议并注册:.regbtn.J_btn_agree

# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开浏览器
driver = webdriver.Chrome()
driver.maximize_window()

# 打开页面
driver.get("https://hmshop-test.itheima.net/Home/user/reg.html")

# 页面操作
# 手机号码:#username
driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13612330001")

# 图像验证码:.inp.imgcode.J_imgcode
driver.find_element(By.CSS_SELECTOR, "[name='verify_code']").send_keys("8888")

# 设置密码:#password
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")

# 确认密码:#password2
driver.find_element(By.CSS_SELECTOR, "#password2").send_keys("123456")

# 推荐人手机:.inp.fmobile.J_cellphone
driver.find_element(By.CSS_SELECTOR, "[name='invite']").send_keys("13488888888")

# 我已阅读并同意《用户服务协议》:
# 同意协议并注册:.regbtn.J_btn_agree
driver.find_element(By.CSS_SELECTOR, ".regbtn.J_btn_agree").click()
time.sleep(3)

# 退出浏览器
driver.quit()
  • 解决手机号唯一性
# 导包
import random

# 页面操作
# 手机号码:#username
# driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13612330001")
driver.find_element(By.CSS_SELECTOR, 
"#username").send_keys(f"136{random.randint(10000000, 99999999)}")

在这里插入图片描述
在这里插入图片描述

2、元素属性定位

  • id定位: driver.find_element(By.ID, “id属性值”)
  • class定位: driver.find_element(By.CLASS_NAME, “class属性值”)
  • name定位: driver.find_element(By.NAME, “name属性值”)
# 导入工具包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver
import random

# 获取驱动、并实现页面元素定位与操作
driver = get_driver("https://hmshop-test.itheima.net/Home/user/reg.html")

# #username
# driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13633331001")
# 引入随机数解决手机号唯一性问题
driver.find_element(By.ID, "username").send_keys(f"136{random.randint(20000000, 88887777)}")

# .inp.imgcode.J_imgcode
driver.find_element(By.CLASS_NAME, "imgcode").send_keys("8888")

# #password
driver.find_element(By.ID, "password").send_keys("123456")

# #password2
driver.find_element(By.ID, "password2").send_keys("123456")

# [name='invite']
driver.find_element(By.NAME, "invite").send_keys("")

# .regbtn.J_btn_agree
time.sleep(2)
driver.find_element(By.CLASS_NAME, "J_btn_agree").click()

# 退出浏览器
quit_driver(driver)

四、后台基础数据自动化

1、登录

1.1 id与class定位

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver

# 获取浏览器并打开页面
driver = get_driver("https://hmshoptest.itheima.net/index.php/Admin/Admin/login")

#页面操作
# [name='username']
driver.find_element(By.NAME, "username").send_keys("admin")

# [name='password']
driver.find_element(By.NAME, "password").send_keys("HM_2023_test")

# #vertify
driver.find_element(By.ID, "vertify").send_keys("8888")

# .sub
time.sleep(1)
driver.find_element(By.CLASS_NAME, "sub").click()

# 退出浏览器
quit_driver(driver)

1.2 定位一组元素

在这里插入图片描述

  • 技术点:定位一组元素
  • 方法:driver.find_elements(定位策略, 表达式)
  • 结果:返回所有找到元素的一个列表,通过列表的下标进行取值操作
# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver

# 获取浏览器并打开页面
driver = get_driver("https://hmshoptest.itheima.net/index.php/Admin/Admin/login")

#页面操作
driver.find_elements(By.CLASS_NAME, "input-text")[0].send_keys("admin")  # ctrl + d
driver.find_elements(By.CLASS_NAME, "input-text")[1].send_keys("HM_2023_test")
driver.find_elements(By.CLASS_NAME, "input-text")[2].send_keys("8888")

# .sub
time.sleep(1)
driver.find_element(By.CLASS_NAME, "sub").click()

# 退出浏览器
quit_driver(driver)

2、商品新增

  • 技术点:定位一组元素
  • 方法:driver.find_elements(定位策略, 表达式)
  • 结果:返回所有找到元素的一个列表,通过列表的下标进行取值操作
# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver

# 获取浏览器并打开页面
driver = get_driver("https://hmshoptest.itheima.net/index.php/Admin/Admin/login")

#页面操作
# 1、商家登录
driver.find_elements(By.CLASS_NAME, "input-text")[0].send_keys("admin")  # ctrl + d
driver.find_elements(By.CLASS_NAME, "input-text")[1].send_keys("HM_2023_test")
driver.find_elements(By.CLASS_NAME, "input-text")[2].send_keys("8888")
time.sleep(1)
driver.find_element(By.CLASS_NAME, "sub").click()

# 2、打开商品上架页面
# 2.1 点击导航栏的【商城】
time.sleep(1)
# driver.find_element(By.LINK_TEXT, "商城").click()
driver.find_element(By.PARTIAL_LINK_TEXT, "商城").click()

# 2.2 点击左侧导航栏【商品列表】
time.sleep(1)
driver.find_element(By.LINK_TEXT, "商品列表").click()

# 2.3 点击【添加商品】按钮
# 元素定位失败场景1:页面存在frame嵌套,需要①先切换到指定的frame页 ② 完成页面元素定位与操作 ③ 
返回默认页面
time.sleep(1)
# 2.3.1 切换frame窗口
driver.switch_to.frame(driver.find_element(By.ID, "workspace"))
# 2.3.2 frame上元素定位与操作
driver.find_elements(By.CLASS_NAME, "add")[0].click()
# 2.3.3 返回默认页面供后续业务操作
driver.switch_to.default_content()

# 3、添加商品
# ① 切换页面
driver.switch_to.frame(driver.find_element(By.ID, "workspace"))
# ② 页面操作
# 3.1 商品名称
time.sleep(1)
driver.find_element(By.NAME, "goods_name").send_keys("Jack-Test-1213-001")

# 3.2 商品分类
driver.find_element(By.ID, "cat_id").click()
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#cat_id>[value='7']").click()
time.sleep(1)

# 3.3 本店售价
driver.find_element(By.NAME, "shop_price").send_keys(10)

# 3.4 市场价
driver.find_element(By.NAME, "market_price").send_keys(20)

# 3.5 是否包邮
driver.find_element(By.ID, "is_free_shipping_label_1").click()

# 3.6 提交
time.sleep(1)
driver.find_element(By.LINK_TEXT, "确认提交").click()

# ③ 返回默认页面
driver.switch_to.default_content()
# 退出浏览器
quit_driver(driver)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库监控 | MongoDB监控全解析

PART 01 MongoDB&#xff1a;灵活、可扩展的文档数据库 MongoDB作为一款开源的NoSQL数据库&#xff0c;凭借其灵活的数据模型&#xff08;基于BSON的文档存储&#xff09;、水平扩展能力&#xff08;分片集群&#xff09;和高可用性&#xff08;副本集架构&#xff09;&#x…

STM32F407使用ESP8266实现阿里云OTA(中)

文章目录 前言一、程序分析二、程序讲解1. main函数2. Get_Version()函数3. esp_Init()函数4. Check_Updata()函数结语前言 从上一章STM32F407使用ESP8266实现阿里云OTA(上)中我们已经对连接阿里云和从阿里云获取升级包的流程非常的熟悉了。所以本章我们进行STM32的程序开发…

微信小程序 tabbar底部导航栏

官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 一、常规菜单格式 在app.json 文件中配置&#xff0c;其他关键点详见官方文档&#xff0c;后续更新不规则图标的写法

Unity InputSystem触摸屏问题

最近把Unity打包后的windows软件放到windows触摸屏一体机上测试&#xff0c;发现部分屏幕触摸点击不了按钮&#xff0c;测试了其他应用程序都正常。 这个一体机是这样的&#xff0c;一个电脑机箱&#xff0c;外接一个可以触摸的显示屏&#xff0c;然后UGUI的按钮就间歇性点不了…

Linux Awk 深度解析:10个生产级自动化与云原生场景

看图猜诗&#xff0c;你有任何想法都可以在评论区留言哦~ 摘要 Awk 作为 Linux 文本处理三剑客中的“数据工程师”&#xff0c;凭借字段分割、模式匹配和数学运算三位一体的能力&#xff0c;成为处理结构化文本&#xff08;日志、CSV、配置文件&#xff09;的终极工具。本文聚…

免费版还是专业版?Dynadot 域名邮箱服务选择指南

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

旋转磁体产生的场-对导航姿态的影响

pitch、yaw、roll是描述物体在空间中旋转的术语&#xff0c;通常用于计算机图形学或航空航天领域中。这些术语描述了物体绕不同轴旋转的方式&#xff1a; Pitch&#xff08;俯仰&#xff09;&#xff1a;绕横轴旋转&#xff0c;使物体向前或向后倾斜。俯仰角度通常用来描述物体…

Day11(回溯法)——LeetCode79.单词搜索

1 前言 今天主要刷了一道热题榜中回溯法的题&#xff0c;现在的计划是先刷热题榜专题吧&#xff0c;感觉还是这样见效比较快。因此本文主要介绍LeetCode79。 2 LeetCode79.单词搜索(LeetCode79) OK题目描述及相关示例如下&#xff1a; 2.1 题目分析解决及优化 感觉回溯的方…

PostgreSQL 分区表——范围分区SQL实践

PostgreSQL 分区表——范围分区SQL实践 1、环境准备1-1、新增原始表1-2、执行脚本新增2400w行1-3、创建pg分区表-分区键为创建时间1-4、创建24年所有分区1-5、设置默认分区&#xff08;兜底用&#xff09;1-6、迁移数据1-7、创建分区表索引 2、SQL增删改查测试2-1、查询速度对比…

SpringCloud 微服务复习笔记

文章目录 微服务概述单体架构微服务架构 微服务拆分微服务拆分原则拆分实战第一步&#xff1a;创建一个新工程第二步&#xff1a;创建对应模块第三步&#xff1a;引入依赖第四步&#xff1a;被配置文件拷贝过来第五步&#xff1a;把对应的东西全部拷过来第六步&#xff1a;创建…

【Python爬虫基础篇】--4.Selenium入门详细教程

先解释&#xff1a;Selenium&#xff1a;n.硒&#xff1b;硒元素 目录 1.Selenium--简介 2.Selenium--原理 3.Selenium--环境搭建 4.Selenium--简单案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠标操作 6.3.键盘操作 6.4.获取断言信息 6.5.…

Langchain检索YouTube字幕

创建一个简单搜索引擎&#xff0c;将用户原始问题传递该搜索系统 本文重点&#xff1a;获取保存文档——保存向量数据库——加载向量数据库 专注于youtube的字幕&#xff0c;利用youtube的公开接口&#xff0c;获取元数据 pip install youtube-transscript-api pytube 初始化 …

【Linux网络】应用层自定义协议与序列化及Socket模拟封装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

客户案例:西范优选通过日事清实现流程与项目管理的优化

近几年来&#xff0c;新零售行业返璞归真&#xff0c;从线上销售重返线下发展&#xff0c;满足消费者更加多元化的需求&#xff0c;国内家居集合店如井喷式崛起。为在激烈的市场竞争中立于不败之地&#xff0c;西范优选专注于加强管理能力、优化协作效率的“内功修炼”&#xf…

LabVIEW实现Voronoi图绘制功能

该 LabVIEW 虚拟仪器&#xff08;VI&#xff09;借助 MathScript 节点&#xff0c;实现基于手机信号塔位置计算 Voronoi 图的功能。通过操作演示&#xff0c;能直观展示 Voronoi 图在空间划分上的应用。 各部分功能详细说明 随机地形创建部分 功能&#xff1a;根据 “Maximum a…

爬虫学习——获取动态网页信息

对于静态网页可以直接研究html网页代码实现内容获取&#xff0c;对于动态网页绝大多数都是页面内容是通过JavaScript脚本动态生成(也就是json数据格式)&#xff0c;而不是静态的&#xff0c;故需要使用一些新方法对其进行内容获取。凡是通过静态方法获取不到的内容&#xff0c;…

创新项目实训开发日志4

一、开发简介 核心工作内容&#xff1a;logo实现、注册实现、登录实现、上传gitee 工作时间&#xff1a;第十周 二、logo实现 1.设计logo 2.添加logo const logoUrl new URL(/assets/images/logo.png, import.meta.url).href <div class"aside-first">…

常见接口测试常见面试题(JMeter)

JMeter 是 Apache 提供的开源性能测试工具&#xff0c;主要用于对 Web 应用、REST API、数据库、FTP 等进行性能、负载和功能测试。​它支持多种协议&#xff0c;如 HTTP、HTTPS、JDBC、SOAP、FTP 等。 在一个线程组中&#xff0c;JMeter 的执行顺序通常为&#xff1a;配置元件…

计算机组成与体系结构:缓存(Cache)

目录 为什么需要 Cache&#xff1f; &#x1f9f1; Cache 的分层设计 &#x1f539; Level 1 Cache&#xff08;L1 Cache&#xff09;一级缓存 &#x1f539; Level 2 Cache&#xff08;L2 Cache&#xff09;二级缓存 &#x1f539; Level 3 Cache&#xff08;L3 Cache&am…

Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?

Flutter 在全新 Platform 和 UI 线程合并后&#xff0c;出现了什么大坑和变化&#xff1f; 在两个月前&#xff0c;我们就聊过 3.29 上《Platform 和 UI 线程合并》的具体原因和实现方式&#xff0c;而事实上 Platform 和 UI 线程合并&#xff0c;确实为后续原生语言和 Dart 的…