selenium2自动化测试学习笔记(五)-参数化编程,自动登陆网易QQ邮箱
学习python下使用selenium2自动测试第6天,参数化编程这节课花了两天时间。
本次编程主要时间是花在熟悉python上
知识点or坑点:
1、读取txt、xml、csv等文件存储的账号、密码
txt文件格式,逗号分割(也可使用其他符号):
www.126.com,user1,pwd1
www.qq.com,user2,pwd2
www.163.com,user3,pwd3
user_file = open('user_info.txt','r')
lines = user_file.readlines()
user_file.close()
for line in lines:
mail = line.split(',')[0]
username = line.split(',')[1]
pwd = line.split(',')[2]
print(mail,username,pwd)
2、打开多窗口,定位新窗口
获取所有窗口句柄:cur_windows = dr.window_handles
定位窗口:
for cur_window in cur_windows:
dr.switch_to.window(cur_window)
3、python编程中self的作用
在我的理解中,self是全局的this对象,定义一个class LoginSetup():
self就是指LoginSetup这个对象本身
在本class中定义多个对象时,可使用self.function( [param1,param2,...] )来调用,
被调用方法的参数self为默认参数,真实接收参数从第二个开始
被调用函数:
def open_url(self,url):
js = 'window.open("'+url+'")'
print(js)
self.driver.execute_script(js)
调用函数:
def login(self):
json_lines = []
……
self.open_login(json_lines)
4、python的init初始化,是前后两个下划线横杠(坑点)
#初始化,两个下划横杠
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
url = 'http://www.baidu.com'
self.init_url = url
self.driver.get(url)
在类运行时,初始化一些参数
5、python的in
for 循环、比较部分字符串都可使用in
foreach:
for line in lines:
print(line['username'])
print(line['pwd'])
比较字符串:
if 'QQ' in url:
print('true')
登陆QQ邮箱代码:
from selenium import webdriver
from time import sleep class QqLogin(): def user_login(dr,username,pwd): print(username,pwd) dr.switch_to.frame("login_frame")
idInput = dr.find_element_by_id('u')
pwdInput = dr.find_element_by_id('p')
idInput.clear()
idInput.send_keys(username)
pwdInput.clear()
pwdInput.send_keys(pwd) #登录
dr.find_element_by_id('login_button').click() #返回上级frame
#dr.switch_to.parent_frame() #返回主frame,此处两个方法都可以
dr.switch_to.default_content() #调用返回主frame需要等一下
sleep(1) switchs = dr.find_elements_by_css_selector('div')
print( len(switchs) ) #获取登录用户名、邮箱
name = dr.find_element_by_id('useralias')
email = dr.find_element_by_id('useraddr')
print('qq登录成功|',name.text,'---',email.text) #dr.quit()
登陆网易邮箱代码
from time import sleep
class WyLogin():
#登录
def user_login(driver,username,pwd):
sleep(1)
print( driver.current_url )
driver.switch_to.frame('x-URS-iframe')
emailInput = driver.find_element_by_name("email")
emailInput.clear()
#emailInput.send_keys(username)#火狐执行无效
email_id = emailInput.get_attribute("id")
js = 'document.getElementById("'+email_id+'").value="'+username+'"'
print(js)
driver.execute_script(js)#执行js
pwdInput = driver.find_element_by_name("password")
pwdInput.clear()
pwdInput.send_keys(pwd)
dologin = driver.find_element_by_id("dologin")
dologin.click()
print('网易邮箱登陆成功')
driver.switch_to.default_content()
登陆方法:
# coding=utf-8
from selenium import webdriver
from time import sleep
from loginQq import QqLogin
from loginWy import WyLogin class LoginSetup(): #初始化,两个下划横杠
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
url = 'http://www.baidu.com'
self.init_url = url
self.driver.get(url) #登录
def login(self):
user_file = open('user_info.txt','r')
lines = user_file.readlines()
user_file.close() try:
json_lines = [] for line in lines:
lineArr = line.split(',')
mail_type = lineArr[0]
mail = lineArr[1]
username = lineArr[2]
pwd = lineArr[3] # 打开浏览器窗口,定位当前窗口
url = 'http://'+mail
self.open_url(url) json_line = {}
json_line['username'] = username
json_line['pwd'] = pwd
json_line['mail'] = mail
json_line['mail_type'] = mail_type
json_lines.append(json_line)
#for end print(json_lines)
self.open_login(json_lines) #关闭浏览器
#self.driver.quit() except BaseException as error:
print('error:',error)
self.driver.quit()
#end login #打开新窗口
def open_url(self,url):
js = 'window.open("'+url+'")'
print(js)
self.driver.execute_script(js)
'''
win_handles = self.driver.window_handles
print( len(win_handles) )
for hand in win_handles:
print( hand ) cur_window = self.driver.current_window_handle
self.driver.switch_to.window(cur_window)
print('now url is ',self.driver.current_url)
'''
# win_handles = self.driver.window_handles
#end open_url #定位新打开窗口,登录
def open_login(self,json_lines):
dr = self.driver
cur_windows = dr.window_handles
print( len(cur_windows) )
username = ''
pwd = ''
mail_type = '' for cur_window in cur_windows:
dr.switch_to.window(cur_window)
cur_url = dr.current_url
print('cur_url 1 = ',cur_url) for line in json_lines:
mail = line['mail']
mail_in = mail.replace('www.','')
print(mail_in,cur_url)
if mail_in in cur_url:
print('username')
mail_type = line['mail_type']
username = line['username']
pwd = line['pwd'] print(mail_type,username) if username == '':
continue #调用登录方法
print('username is ',username)
if 'QQ' in mail_type:
QqLogin.user_login(dr,username,pwd)
if 'WY' in mail_type:
WyLogin.user_login(dr,username,pwd) # end open_login #调用登录方法
LoginSetup().login()
txt文件格式:
WY,www.126.com,user1,pwd1
WY,mail.163.com,user2,pwd2
QQ,mail.qq.com,user3,pwd3
selenium2自动化测试学习笔记(五)-参数化编程,自动登陆网易QQ邮箱的更多相关文章
- CAS学习笔记五:SpringBoot自动/手动配置方式集成CAS单点登出
本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出. 本文基于<CAS学习笔记三:SpringBoot自动/手动配置方式集成C ...
- selenium2自动化测试学习笔记(四)
今天是学习selenium2第四天.总结下今天的学习成果,自动登录网易邮箱并写信发送邮件. 知识点or坑点: 1.模块化编写测试模块(类似java里的抽象方法,js的函数编写) from 包名 imp ...
- selenium2自动化测试学习笔记(一)
从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...
- python自动化测试学习笔记-unittest参数化
做接口测试的时候,当一个参数需要输入多个值的时候,就可以使用参数来实现: python中unittest单元测试,可以使用nose_parameterized来实现: 首先需要安装:pip inst ...
- python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件
面向对象编程(OOP)术语: class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 ...
- selenium2自动化测试学习笔记(三)
今天是学习selenium的第三天,今天的主题是自动登录126邮箱. 今天总结碰到的坑有三个: 1.frame内元素抓取,使用driver.switch_to.frame(frameId)方法切换锁定 ...
- selenium2自动化测试学习笔记(二)
chromedriver报错问题解决了,真是无语 是因为chromedriver与浏览器版本不一致 http://chromedriver.storage.googleapis.com/index.h ...
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
随机推荐
- OTG驱动分析(一)
前一段时间弄了2个礼拜的OTG驱动调试,感觉精神疲惫啊.主要原因还是自己对OTG功能不了解造成的.现在终于完成但是对实质原理还有些模糊.所以自己重新总结一下.因为自己是菜鸟,所以用菜鸟的白话方式分析. ...
- Exynos4412从SD卡启动的简单网络文件系统制作
Exynos4412从SD卡启动的简单网络文件系统制作 1. 简介 嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootf ...
- freemarker声明变量(十)
freemarker声明变量 1.使用assign创建和替换变量 (1)新建声明变量的ftl variable.ftl: <html> <head> <meta http ...
- 使用 github 做代码管理,知道这些就够了
只要掌握了下面的常用命令,基本上用使用 github 就没有问题.github 有两种认证方式,一种是通过 ssh 私钥的方式,一种通过 https 的账号名和密码.ssh 方式需要创建本地秘钥并且添 ...
- FFT \ NTT总结(多项式的构造方法)
前言.FFT NTT 算法 网上有很多,这里不再赘述. 模板见我的代码库: FFT:戳我 NTT:戳我 正经向:FFT题目解题思路 \(FFT\)这个玩意不可能直接裸考的..... 其实一般\(FF ...
- 【BZOJ2729】【HNOI2012】排队(组合数学)
不想弄题面了... 题解 做这道题目我真的好蠢... 好容易的数学题目 很明显自己写高精度吧...(不解释了) 剩下的如何计算. 要有两类情况 ①老师之间有男生 那么,这种情况下,直接插空就行了 先把 ...
- [HNOI2013]切糕
题目描述 网址:https://daniu.luogu.org/problemnew/show/3227 大意: 平面上有一长方体,目标为将其切割为上下两半. 切割点为\((x,y,z)\)的点,每个 ...
- 快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型
前言 3D 场景中的面不只有水平面这一个,空间是由无数个面组成的,所以我们有可能会在任意一个面上放置物体,而空间中的面如何确定呢?我们知道,空间中的面可以由一个点和一条法线组成.这个 Demo 左侧为 ...
- TC命令流量控制测试(针对具体IP和具体进程)
TC命令流量控制测试 这里测试系统为Linux操作系统,通过简单的TC命令来实现对带宽的控制. 1对具体IP地址的流量控制 这里采用iperf来进行带宽的测试,首先在服务器和客户端都安装上iperf软 ...
- 微信小程序初探【类微信UI聊天简单实现】
微信小程序最近很火,火到什么程度,只要你一打开微信,就是它的身影,几乎你用的各个APP都可以在微信中找到它的复制版,另外官方自带的跳一跳更是将它推到了空前至高的位置.对比公众号,就我的感觉来说,有以下 ...