python自动化测试(四):ECShop后台:商品分类添加

前置条件:

本地部署:ECShop的版本是3.0.0、Google版本是

Google Chrome65.0.3325.162 (正式版本) (32 位) 

Google驱动的selenium版本是3.11.0

目录

前置代码

一、登录(后台登录)

二、进入商品分类页面

三、子页面

四、返回父级/最外层页面

五、点击添加分类按钮

六、输入分类

6.1 输入分类名称

6.2 上级分类 -- 下拉菜单的实现

6.3 输入 数量单位

6.4 输入排序

6.5 单选框

6.6 多选框

6.7 点击确定按钮

6.8 A下拉框对应不同的B下拉框

七、结束进程


前置代码
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Chrome()
url = "http://localhost/ecshop/admin/privilege.php?act=login"
driver.get(url)
# 最大化浏览器窗口
driver.maximize_window()
# 添加全局的等待时间
driver.implicitly_wait(10)

这里我是部署了一个本地的ECSHOP项目,所以该篇就以我的项目为准设置了

一、登录(后台登录)
# 一、登录
# 输入用户名
driver.find_element_by_name("username").send_keys("admin")
# 输入密码
driver.find_element_by_name("password").send_keys("t1194783")
driver.find_element_by_class_name("btn-a").click()

运行,登录成功,然后进入到后台页面

二、进入商品分类页面
# 点击商品分类
driver.find_element_by_link_text("商品分类").click()

然后这里跑代码,是出问题了,找不到元素

那么有可能是页面中包含了子页面的问题

三、子页面

去检查一下上图的列表,发现他是被一个标签<frame>包裹的

而这个标签,相当于独立页面的意思

在HTML中,<frame>标签用于定义一个框架(也称为窗口或浏览器窗口的一部分)。

这使得可以在浏览器中显示多个不同的网页,使它们在同一个窗口内分开。

那么,就先进入到子页面,也就是id为menu-frame的frame标签中

进入子页面的方法

driver.switch_to.frame(“main-frame”)

进入子页面
通过id或者name时可以直接将id或者name放到frame()函数的括号中直接切换子页面
driver.switch_to.frame(“main-frame”)
如果是通过其他六种方式定位子页面,我们需要将完整的定位语句放在括号中,才能正确切换子页面
#进入子页面
ele=driver.find_element_by_xpath("//frame[@id='main-frame']")
driver.switch_to.frame(ele)driver.switch_to.frame() #旧方法
driver.switch_to_frame() #新方法
# 二、商品分类页面
# 1、进入子页面
driver.switch_to.frame("menu-frame")
# 2、点击商品分类
driver.find_element_by_link_text("商品分类").click()

这样子就可以成功跳转了

四、返回父级/最外层页面

现在所处的页面范围是在左侧列表的frame标签里面,所以我们得往上退回去

那么,返回父级页面的语法是:driver.switch_to.parent_frame()

但是这里不返回父级,我们返回到最外层

返回最外层页面
driver.switch_to.default_content()

# 三、返回最外层
driver.switch_to.default_content()

五、点击添加分类按钮

点击该按钮,右侧的页面同样被frame标签分割了,所以也需要访问到子页面,这里可以用xpath的方式去访问这个子页面

# 四、点击添加分类
# 进入子页面
ele = driver.find_element_by_xpath("//frame[@id='main-frame']")
driver.switch_to_frame(ele)
time.sleep(2)
# 点击添加分类
driver.find_element_by_xpath("//html/body/h1/span[1]/a").click()

六、输入分类
6.1 输入分类名称

# 输入分类名称
driver.find_element_by_name("cat_name").send_keys("服装")

6.2 上级分类 -- 下拉菜单的实现

1、先获取到select的下拉菜单元素

2、创建一个Select('元素') 对象

在获取到的Select对象中,有三个方法可以进行操作

s.select_by_index(index) # 根据索引从0开始选择一个选项
s.select_by_value(value) # 根据其值开始选择一个选项
s.select_by_visible_text("text") # 根据选项的文本,选择一个选项

这里先创建个对象

# 选择上级分类
ele = driver.find_element_by_name("parent_id")
s = Select(ele)

select_by_index(index)方法:

s.select_by_index(1)

(这里也根据索引,选择了第二个选项)

select_by_value(val)方法:

如果是用这个方法,可以看一下select列表里面option元素对应的value属性值

选择value值为27的选项

s.select_by_value("27")

select_by_visible_text("文本")方法:

s.select_by_visible_text("顶级分类")

6.3 输入 数量单位
#输入数量单位
driver.find_element_by_name("measure_unit").send_keys("1000")

6.4 输入排序

此处的排序和数量单位虽然都是输入,但是排序是有默认值的,这个时候,先获取排序的元素,通过方法:clear() 清空数据,再进行输入

#输入排序
driver.find_element_by_name("sort_order").clear()
driver.find_element_by_name("sort_order").send_keys("10")

6.5 单选框

单选框的话可以通过xpath去定位,用序号的方法

#选择是否显示(是)
driver.find_element_by_xpath("(//input[@name='is_show'])[1]").click()
#选择是否显示在导航栏
driver.find_element_by_xpath("(//input[@name='show_in_nav'])[2]").click()

去审查一下元素

单选框的input标签的name属性值是一致的,那点击顺序按序号获取就好了

6.6 多选框

这里要点击几个,就按序号点击几次,写几行点击事件就好了

#选择设置首页推荐(精品)
driver.find_element_by_xpath("(//input[@name='cat_recommend[]'])[1]").click()
#选择设置首页推荐(最新)
driver.find_element_by_xpath("(//input[@name='cat_recommend[]'])[2]").click()

(点击第一个和第二个)

6.7 点击确定按钮
#点击确定按钮
driver.find_element_by_xpath("//input[@type='submit']").click()

6.8 A下拉框对应不同的B下拉框

# 1、先获取到A下拉框,然后
ele_a = driver.find_element_by_xpath("//*[@id=\"tbody-attr\"]/tbody/tr/td/select[1]")
a = Select(ele_a)
a.select_by_visible_text("精品手机")# 2、获取B的下拉
ele_b = driver.find_element_by_xpath("//*[@id=\"tbody-attr\"]/tbody/tr/td/select[2]")
b = Select(ele_b)
b.select_by_visible_text("上市日期")

七、结束进程
time.sleep(5)
driver.quit()

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

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

相关文章

常用应用安装教程---在centos7系统上安装JDK8

在centos7系统上安装JDK8 1&#xff1a;进入oracle官网下载jdk8的tar.gz包&#xff1a; 2&#xff1a;将下载好的包上传到每个服务器上&#xff1a; 3&#xff1a;查看是否上传成功&#xff1a; [rootkafka01 ~]# ls anaconda-ks.cfg jdk-8u333-linux-x64.tar.gz4&#xf…

asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

一、源码特点 asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题)&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为vs2010&#xff0c;数据库为sqlserver…

Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK

请求场景&#xff1a; 当前页面URL&#xff1a;http://127.0.0.1:8000/testcase 跳转请求页面URL&#xff1a;http://127.0.0.1:5000/testcase_orm 使用axios请求 时 页面提示跨域报错 跨域报错信息 > Access to XMLHttpRequest at http://127.0.0.1:5000/testcase_orm fr…

[SQL开发笔记]LIKE操作符:在 WHERE 子句中搜索列中的指定模式

一、功能描述&#xff1a; LIKE操作符&#xff1a;用于在 WHERE 子句中搜索列中的指定模式。 二、LIKE操作符语法详解&#xff1a; LIKE 语法 SELECT column1, column2,…FROM table_nameWHERE column LIKE pattern; 参数说明&#xff1a; &#xff08;1&#xff09;colum…

目前和未来的缓存构建

说起来可能有点反直觉&#xff0c;有时候不运行反而可以帮助我们加快速度&#xff0c;这正是网络浏览器运行的指导原则。不必在页面上加载所有内容&#xff0c;缓存的元素已经存在&#xff0c;不需要每次访问网站或网页时都重新加载。页面加载速度越快&#xff0c;浏览器的工作…

大数据Flink(一百零二):SQL 聚合函数(Aggregate Function)

文章目录 SQL 聚合函数(Aggregate Function) SQL 聚合函数(Aggregate Function) Python UDAF,即 Python AggregateFunction。Python UDAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等。针对同一组输入数据,Python A…

伦敦银现货白银走势如何应对

伦敦银是国际现货白银交易的别称&#xff0c;它每天的价格走势受到全球投资者广泛的关注&#xff0c;也是全球各个白银市场的价格指标。白银投资者要了解伦敦银走势的特点&#xff0c;才能更好地进行分析&#xff0c;实现自己的所预期的收益。 整体来说&#xff0c;伦敦银价格的…

Visual Studio远程连接Linux编译代码时,头文件在/usr/include中找不到,文件存在于/usr/include的子目录中

文章目录 1 问题的提出2 问题分析3 问题的解决 1 问题的提出 VS2022在编译数据安全传输平台时&#xff0c;远程连接到Centos上进行编译&#xff0c;但是提示找不到json头文件。 2 问题分析 在Linux系统下编译代码时&#xff0c;系统会主动到/usr/include目录主动搜索头文件。…

【Unity程序技巧】事件管理器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Spring Boot集成Swagger接口分类与各元素排序问题

在上一篇中我们完成使用JSR-303校验&#xff0c;以及利用Swagger2得到相关接口文档&#xff0c;这节&#xff0c;我们在原先的基础之上&#xff0c;完成Swagger中关于对各个元素之间控制前后顺序的具体配置方法。 Swagger的接口的分组 首先我们需要对Swagger中的接口也就是以…

智能汽车安全:保护车辆远程控制和数据隐私

第一章&#xff1a;引言 智能汽车技术的快速发展为我们带来了许多便利&#xff0c;但也引发了一系列安全和隐私问题。本文将探讨智能汽车安全的重要性&#xff0c;以及如何保护车辆远程控制和数据隐私。 第二章&#xff1a;智能汽车远程控制 智能汽车的远程控制是一项令人兴…

全球生物气候产品2.5m和30s分辨率

简介 生物气候是指生物和气候相互作用的结果&#xff0c;包括植物和动物对气候的影响&#xff0c;以及气候对生物的影响。生物气候研究的是生物、气候、土地和水等自然要素之间相互作用的过程&#xff0c;旨在探讨它们是如何互动并导致生态系统的变化的。生物气候对于理解全球…

MySQL数据库基本操作1

文章目录 主要内容一.DDL1.创建表代码如下&#xff08;示例&#xff09;: 2.创建表的类型3.其他操作4.修改表结构格式代码如下&#xff08;示例&#xff09;: 二.DML1.数据插入代码如下&#xff08;示例&#xff09;: 2.数据修改代码如下&#xff08;示例&#xff09;: 3.数据删…

FastAPI 快速学习之 Flask 框架对比

目录 一、前言二、FastAPI 优势三、Hello World四、HTTP 方法五、URL 变量六、查询字符串七、POST 请求八、文件上传九、表单提交十、Cookies十一、模块化视图十二、数据校验十三、自动化文档Swagger 风格ReDoc 风格 十四、CORS跨域 一、前言 本文主要对 FastAPI 与 Flask 框架…

Qt在Android上设置连接到指定的WIFI

在Android上使用Qt设置连接到指定的Wi-Fi网络需要使用Java代码来完成,涉及到Android平台特定的API和权限。接下来下面将会演示如何在Qt中调用Java代码来实现这一功能。 【1】在Qt项目中创建一个名为"AndroidWifiConnector"的Java类。 (新建文件,选择JAVA类型,名字…

51单片机的PWM控制呼吸灯

文章目录 前言一、PWM引脚以及寄存器的配置二、呼吸灯逻辑总结 前言 hello 大家好这里是夏目学长的51单片机课堂&#xff0c;本篇博客是夏目学长观看B站up主学电超人的视频所写的一篇51单片机入门博客之51单片机PWM配置呼吸灯 &#xff0c;我自己在学习这节课程的时候觉得这节…

2023.10.26-SQL测试题

employee表&#xff1a; department表&#xff1a; job表&#xff1a; location表&#xff1a; 题目及答案&#xff1a; -- (1).查询工资大于一万的员工的姓名(first_name与last_name用“.”进行连接)和工资-- select CONCAT(first_name,.,last_name) as 姓名 ,salary -…

个人用户免费,亚马逊正式推出 AI 编程服务 CodeWhisperer

IT 之家 4 月 14 日消息&#xff0c;亚马逊于 2022 年 6 月以预览版的形式&#xff0c;推出了 AI 辅助编程服务 CodeWhisperer。亚马逊于今天宣布该服务正式上线&#xff0c;并免费向个人用户开放。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、…

【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

S5PV210裸机(七):Nand和iNand

本文主要探讨210Nand和iNand相关知识。 NandFlash 型号与命 K9F2G08&#xff1a;K9F为发行商,2G为Nand大小是2Gbit(256MB),08为Nand是8位(8数据线即接口为8位:传输数据,地址,命令) 功能 Nand是矩阵式存储,每块可存1bit位 …