【Selenium+python】自动化测试登录界面

news2025/1/21 16:35:06

前言:已经学习selenium许久了,奈何公司的项目还在码代码中...,感觉自己学的东西快忘的差不多了,所以就找个网站练练手,顺便回顾一下UI自动化的知识,也希望跟我一样的小白有所受益。

一、用例分析(根据所测网站对应分析)

用例1:

正确输入手机号和密码,点击登录

期望:有帮助中心字样(系统跳至首页后,会有个帮助中心,也可以选择其他字样作为判定,这里不方便截图:)

用例2:

不输入手机号和密码,点击登录

期望:请输入手机号码(提示信息)

用例3:

只输入手机号不输入密码,点击登录

期望:请输入密码(提示信息)

用例4:

只输入密码不输入手机号,点击登录

期望:请输入手机号码(提示信息)

用例5:

输入错误的用户名和密码

期望:账号不存在(提示信息)

。。。。。。

当然,还有测试用例没列举完,比如特殊字符、长度等的校验,由于测试的这个网站没有相关校验(😶无奈。。),所以暂不做介绍。

二、代码编写

登录测试文件:test_klogin.py

import unittest
from selenium import webdriver
import time
from common.base import Base
 
class TestKlogin(unittest.TestCase):
 
    #定位手机号
    username = ("name","loginName")
    #定位密码
    psw = ("name","loginPassWord")
    #定位登录按钮
    loginbutton = ("id","loginBtn")
    #定位帮助中心
    help = ("xpath","//*[contains(text(),'帮助中心')]")
    print("help",help)
    #定位提示信息
    message = ("className","toast-message")
    print("message" ,message)
 
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        cls.baselei = Base(cls.driver)
 
    def setUp(self):
        self.driver.get("url地址")
 
    def tearDown(self):
        # 清空cookies
        self.driver.delete_all_cookies()
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
 
 
    def test_01_loginsuccess(self):
        '''正确输入手机号和密码'''
        self.baselei.send(self.username,"13000000000")
        self.baselei.send(self.psw,"666666")
        self.baselei.click(self.loginbutton)
        result1=self.baselei.is_element_exist(self.help)
        self.assertTrue(result1)
 
    def test_02_bushuru(self):
        '''不输入,点击登录'''
        self.baselei.click(self.loginbutton)
        result2 =self.baselei.find(self.message).text
        print("我是内容test02:",result2)
        exp2 = "请输入手机号码"
        self.assertEqual(result2,exp2)
 
    def test_03_shuruname(self):
        '''只输入手机号,不输入密码'''
        self.baselei.send(self.username,"12343657")
        self.baselei.click(self.loginbutton)
        result3 = self.baselei.find(self.message).text
        print("我是内容test03:",result3)
        exp3="请输入密码"
        self.assertTrue(result3==exp3)
 
    def test_04_shurupsw(self):
        '''只输入密码,不输入手机号'''
        self.baselei.send(self.psw,"123465")
        self.baselei.click(self.loginbutton)
        result4 = self.baselei.find(self.message).text
        print("我是内容test04:",result4)
        exp4="请输入手机号码"
        self.assertTrue(result4==exp4)
 
    def test_05_shurufail(self):
        '''输入错误的账号和密码'''
        self.baselei.send(self.username,"4334668")
        self.baselei.send(self.psw,"325465")
        self.baselei.click(self.loginbutton)
        result5 = self.baselei.find(self.message).text
        print("我是内容test05",result5)
        exp5 = "账号不存在"
        self.assertEqual(result5,exp5)
 
 
if __name__ == '__main__':
    unittest.main()

base文件:base.by

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
 
 
class Base():
 
    def __init__(self,driver):
        self.driver=driver
 
    def find(self,locator):
        '''locator = ("id","kw"),查找某元素'''
        element = WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_element(*locator))
        return element
 
    def send(self,locator,text):
        '''输入框传值'''
        self.find(locator).send_keys(text)
 
    def click(self,locator):
        '''点击事件'''
        self.find(locator).click()
 
    def is_element_exist(self,locator):
        '''判断元素是否存在'''
        els=self.finds(locator)
        count = len(els) #计算元素个数
        if len(els) < 1:
            return False
        else:
            print("定位到的元素个数:%s"%count)
            return True

三、运行结果

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

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

相关文章

线扫相机DALSA--常见问题四:修改相机参数,参数保存无效情况

该问题是操作不当&#xff0c;未按照正常步骤保存参数所致&#xff0c;相机为RAM机制&#xff0c;参数需保存在采集卡的ROM内。 保存参数步骤&#xff1a; ①首先将相机参数保存至User Set1&#xff1b; ②然后回到Board(采集卡)参数设置区&#xff0c;鼠标选中Basic Timing&a…

C++——类和对象(中)完结

赋值运算符重载 运算符重载 C 为了增强代码的可读性引入了运算符重载 &#xff0c; 运算符重载是具有特殊函数名的函数 &#xff0c;也具有其 返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键…

中富转债,章鼓转债上市价格预测

中富转债-123226 基本信息 转债名称&#xff1a;中富转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;5.2亿元。 正股名称&#xff1a;中富电路&#xff0c;今日收盘价&#xff1a;30.03元&#xff0c;转股价格&#xff1a;36.44元。 当前转股价值 转债面…

桥接模式birdge

简介 桥接模式&#xff1a;将抽象与实现相分离&#xff0c;使他们可以独立变化。 角色 抽象化&#xff08;Abstraction&#xff09;角色&#xff1a; 该类持有一个对实现角色的引用&#xff0c;抽象角色中的方法需要实现角色来实现&#xff0c;抽象角色一般为抽象类&#xf…

NOA标配搭载率不足3%!英伟达中国「自研」智驾方案

汽车行业的特殊性&#xff0c;意味着&#xff0c;对于供应链来说&#xff0c;一家独大几乎不可能。对于芯片赛道来说&#xff0c;同样如此。 以智能驾驶为例&#xff0c;目前的供应链形态&#xff0c;也正处于变革的关键周期。各路玩家也都在尝试与车企合作模式的多元化。 高工…

并发请求控制

Chrome 浏览器最多并发6个请求。一般情况下&#xff0c;我们都会设置并发数为 3。 并发请求控制主要有两种区别&#xff1a;假设并发数为 3 三个请求为一组进行并发&#xff0c;这三个请求全部完成了&#xff0c;再进行下一组。在第一种方式的基础上加上滑动补位&#xff0c;…

Express框架开发接口之前台分类导航

1.初始化 const handleDB require(../handleDB/index) // 获取全部导航 exports.allNav (req, res) > {(async function () {})() } // 更新或者添加导航 exports.upNav (req, res) > {(async function () {})() } // 根据id删除 exports.delNav (req, res) > {(a…

Mac电脑风扇控制推荐 Macs Fan Control Pro 中文 for mac

Macs Fan Control Pro是一款功能全面、易于使用且具有良好兼容性和安全性的风扇控制软件&#xff0c;适用于各种Mac用户。 除了能够调整风扇速度外&#xff0c;Macs Fan Control Pro还支持实时监测硬件传感器的温度&#xff0c;例如CPU、硬盘等&#xff0c;同时显示每个传感器…

SpringBoot系列之自定义Jackson对象映射器格式日期数据

开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2Mysql5.7.36开发工具 IntelliJ IDEAsmartGit 背景 在我之前的博客中&#xff0c;有对Springboot2.0集成Mybatis Plus做了比较详细的描述&#xff0c;现在这篇博客介绍&#xff0c;基于开源的jackson api来自定义ObjectMapping&…

MPLAB X IDE 仿真打断点提示已中断的断点?

这种中间带裂缝的是无效断点。 原因可能与XC编译器的优化有关&#xff0c;最后生成的汇编与C语言并不是一一对应的(官方给的解释是效率高)。所以这一行C语言转换的汇编代码可能并不在这个位置&#xff0c;也可能与其它汇编合并后根本就没有 我的解决方法是把优化等级调到最低&a…

【多线程面试题二十二】、 说说你对读写锁的了解

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说说你对读写锁的了解 …

windows server 2016调优

1. 增加TCP连接的最大数量&#xff1a; 在您当前的注册表路径&#xff08;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters&#xff09;中的右侧窗格&#xff0c;右击空白处&#xff0c;选择“新建” -> “DWORD (32位) 值”。为新的值命名为TcpNu…

Python:PDF转长图像和分页图像

简介&#xff1a;随着电子化文档的普及&#xff0c;PDF文件的使用频率越来越高。有时我们需要将PDF中的内容转化为图片格式进行分享或编辑&#xff0c;那么如何才能轻松地完成此任务呢&#xff1f;本文将为你展示一个Python工具&#xff1a;如何将PDF文件转化为图片&#xff0c…

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…

redis的两种持久化的方式 RDB AOF

1. RDB持久化 就是将某个时间点的数据快照&#xff0c;全部保存在磁盘的二进制文件中。 可以选择命令手动触发&#xff1a; save命令&#xff0c;阻塞式保存快照数据&#xff0c;会阻塞其它操作 bgsave&#xff0c;开启子线程执行RDB 或者配置文件配置自动触发&#xff1a; 在r…

C#中只能在.NetFramework下使用LINQtoSQL不要在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点&#xff0c;因为我百般努力在.net7.0下无法实现LINQtoSQL的…

走近Python爬虫(二):常见反爬虫机制的应对措施

文章目录 一、应对—异步加载1.一般措施2.Selenium 二、应对—登录验证1.使用Selenium模拟登录2.使用Cookies登录3.使用Session模拟表单登录 三、应对—验证码 本文是Python爬虫系列博客的第二篇&#xff0c;内容概览如下&#xff1a; 一、应对—异步加载 1.一般措施 AJAX技术…

【操作系统】Cygwin和MinGW的区别与联系是怎样的?

Cygwin和MinGW的区别与联系是怎样的&#xff1f; CygwinMinGW两者的区别和联系参考资料 Cygwin和MinGW都是为Windows系统开发者设计的工具。 Cygwin Cygwin&#xff0c; 原Cygnus出品&#xff0c;目前是RedHat名下的项目。项目的目的是提供运行于Windows平台的类Unix环境&…

Linux - 浅析守护进程的概念

Linux下的守护进程是在后台运行的特殊进程&#xff0c;它不与任何终端关联&#xff0c;通常在系统启动时自动启动&#xff0c;运行在后台并且不受用户登录或注销的影响。Linux 下的守护进程通常是以系统管理员的权限运行&#xff0c;用来执行一些系统任务&#xff0c;例如监控硬…

MATLAB R2023b(编程和数学计算软件)

MATLAB R2023b是一款最新版本的编程和数学计算软件&#xff0c;它包含了大量用于算法开发、数据可视化、数据分析、数据模拟以及交互式环境的功能&#xff0c;使得用户能够更加方便灵活地进行科学研究或者工程应用。 MATLAB R2023b相较于之前的版本&#xff0c;增加了一些新的…