Selenium2+python自动化48-登录方法(参数化)
时间:2022-05-07
本文章向大家介绍Selenium2+python自动化48-登录方法(参数化),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了
一、登录方法
1.把输入账号、输入密码、点击登录按钮三个步骤写成一个方法
2.然后把输入的账号和密码参数化
二、用例
1.下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程
2.判断是否登录成功,我这里是取的登录成功后的账户名
三、判断方法封装
1.如果用上面的方法去判断的话,有个缺陷,当登录不成功的时候,页面是不会跳转的,所以查找元素会报异常:
NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"lnk_current_user"}
2.这个时候就简单封装下判断方法:获取到账户名返回Ture;没有获取到返回False
四、优化后案例
1.优化后的登录案例如下,这样看起来更清楚了
五、参考代码
# coding:utf-8
from selenium import webdriver
import unittest
import time
class Bolg(unittest.TestCase):
u'''登录博客'''
def setUp(self):
self.driver = webdriver.Firefox()
url = "https://passport.cnblogs.com/user/signin"
self.driver.get(url)
self.driver.implicitly_wait(30)
def login(self, username, psw):
u'''这里写了一个登录的方法,账号和密码参数化'''
self.driver.find_element_by_id("input1").send_keys(username)
self.driver.find_element_by_id("input2").send_keys(psw)
self.driver.find_element_by_id("signin").click()
time.sleep(3)
def is_login_sucess(self):
u'''判断是否获取到登录账户名称'''
try:
text = self.driver.find_element_by_id("lnk_current_user").text
print text
return True
except:
return False
def test_01(self):
u'''登录案例参考:账号,密码自己设置'''
self.login(u"上海-悠悠", u"xxxx") # 调用登录方法
# 判断结果
result = self.is_login_sucess()
self.assertTrue(result)
def test_02(self):
u'''登录案例参考:账号,密码自己设置'''
self.login(u"上海-悠悠", u"xxxx") # 调用登录方法
# 判断结果 # 交流QQ群:232607095
result = self.is_login_sucess()
self.assertTrue(result)
# def test_01(self):
# u'''登录案例参考:账号,密码自己设置'''
# self.login(u"上海-悠悠", u"xxxx") # 调用登录方法
# # 获取登录后的账号名称
# text = self.driver.find_element_by_id("lnk_current_user").text
# print text
# # 断言实际结果与期望结果一致
# self.assertEqual(text, u"上海-悠悠")
#
# def test_02(self):
# u'''登录案例参考:账号,密码自己设置'''
# self.login(u"上海-悠悠", u"oooo") # 调用登录方法
# # 获取登录后的账号名称
# text = self.driver.find_element_by_id("lnk_current_user").text
# print text # 交流QQ群:232607095
# # 断言实际结果与期望结果一致
# self.assertEqual(text, u"上海-悠悠")
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
- F-Stack 助力 HTTP 网络服务器性能提升
- How to build Multi-Language Web Sites with ASP.NET 2.0 and VS.Net 2005
- 动态生成TreeView方法(二)
- Gradle打jar包如何上传到maven本地库
- POJO应用框架:Spring与EJB3.0的比较
- spring Boot 整合mybatis 如何使用多数据源
- 动态生成TreeView方法(一)
- hadoop系列之深入优化
- Using sqlite with .NET
- Gridview行上下移动自己做的一个小例子(第一种方法)
- Hadoop伪分布式集群安装部署
- sql 表有没有自增列,插入自增列值
- jsp中的JSTL与EL表达式用法及区别(二)
- WPF 给控件添加复制事作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D
- DFS+记忆化搜索 -- 简单练习
- AtCoder Beginner Contest 154
- map + pair用法练习
- 蛇形矩阵
- 【SpringBoot WebFlux 系列】 header 参数解析