selenium2自动化测试学习笔记(四)
今天是学习selenium2第四天。总结下今天的学习成果,自动登录网易邮箱并写信发送邮件。
知识点or坑点:
1、模块化编写测试模块(类似java里的抽象方法,js的函数编写)
from 包名 import 类
调用def定义的方法
2、xpath怎么获取包含部分文本的标签
#获取写信按钮:先获取包含‘写’字的span,再取它的上级li
xx = driver.find_element_by_xpath('//span[contains( text(),"写" )]/parent::li')
1)contains方法为部分包含,模糊查找;(开始找“写信”两个字始终没找到,因为其实文本是“写 信”,坑)
2)python的xpath获取text方法比较特殊,其他属性都是“@属性”获取,文本却是用text()""
3)父节点获取使用parent:: 参考原文链接:http://blog.csdn.net/TestLearner/article/details/75569388
3、无法用id、name定位到iframe时,怎么定位frame
#利用xpath获取frame 再switch_to
frame = driver.find_element_by_xpath("//iframe[@class='APP-editor-iframe']")
driver.switch_to.frame(frame)
1) driver.switch_to.frame('ID'),driver.switch_to.frame('name')都可以定义子frame,然后就可以操作frame内元素了
2)在无法正常获取frame内元素时,可使用sleep(秒)方法多等待一会,设置1秒一般就够了(坑)
大家都是程序员,以下就贴代码了
首先是模块化编写public包,定义一个class:
from time import sleep
class Login():
#登录
def user_login(self,driver):
username = 'testuser'#邮箱用户名
pwd = 'testpwd123'#密码
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()
#退出
def user_logout(self,driver):
driver.find_element_by_link_text("退出").click()
driver.quit()
#写信
def write(self,driver):
#获取写信按钮:先获取包含‘写’字的span,再取它的上级li
xx = driver.find_element_by_xpath('//span[contains( text(),"写" )]/parent::li')
sx = driver.find_element_by_xpath('//span[contains( text(),"收" )]/parent::li')
print('写:',xx.text,'--收:',sx.text)
print('写:',xx.get_attribute('class'),'--收:',sx.get_attribute('class'))
xx.click()
#收件人
sjr = driver.find_element_by_xpath('//input[@class="nui-editableAddr-ipt"]')
sjr.clear()
#sjrId = sjr.get_attribute('id')
#js = 'document.getElementById('+sjrId+').innerText=448671246@qq.comWW'
#driver.execute_script(js)
sjr.send_keys('448671246@qq.com')
#主题
zt = driver.find_element_by_xpath('//div[@class="bz0"]/div/input[@class="nui-ipt-input"]')
#print( len(zt) )
zt.send_keys('我是主题')
#利用xpath获取frame 再switch_to
frame = driver.find_element_by_xpath("//iframe[@class='APP-editor-iframe']")
driver.switch_to.frame(frame)
#等待1秒,再获取frame内容
sleep(2)
#内容
bd = driver.find_element_by_xpath('//body[@class="nui-scroll"]')
bd.send_keys('我是测试内容002')
#返回主页面后,需要等待一下,否则可能定位不到元素
driver.switch_to.default_content()
sleep(2)
#随便选择一个发送按钮,点击发送
fs = driver.find_elements_by_xpath('//span[@class="nui-btn-text"]/parent::div[contains(@class,"nui-btn-hasIcon nui-mainBtn-hasIcon")]')
print('fs len is ',len(fs))
fs[0].click()#发送
写完了public包,定义一个Login类,再来看怎么引用
from selenium import webdriver
from public import Login
from time import sleep #打开谷歌浏览器
dr = webdriver.Chrome() #隐式等待10秒,等待页面元素加载完毕
dr.implicitly_wait(10) #打开网页
url = 'http://mail.163.com'
dr.get(url) #沉睡等待一秒后定位frame
sleep(1)
dr.switch_to.frame('x-URS-iframe') try:
#调用登录模块
Login().user_login(dr)
print('登录成功')
except BaseException as msg:
print(msg)
dr.quit() #返回主frame
dr.switch_to.default_content()
sleep(1) try:
#退出
Login().write(dr)
print('写信成功')
except BaseException as msg:
print(msg)
sleep(1)
dr.quit() sleep(1)
try:
#退出
Login().user_logout(dr)
print('退出成功')
except BaseException as msg:
print(msg)
dr.quit()
selenium2自动化测试学习笔记(四)的更多相关文章
- selenium2自动化测试学习笔记(一)
从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...
- selenium2自动化测试学习笔记(五)-参数化编程,自动登陆网易QQ邮箱
学习python下使用selenium2自动测试第6天,参数化编程这节课花了两天时间. 本次编程主要时间是花在熟悉python上 知识点or坑点: 1.读取txt.xml.csv等文件存储的账号.密码 ...
- selenium2自动化测试学习笔记(三)
今天是学习selenium的第三天,今天的主题是自动登录126邮箱. 今天总结碰到的坑有三个: 1.frame内元素抓取,使用driver.switch_to.frame(frameId)方法切换锁定 ...
- selenium2自动化测试学习笔记(二)
chromedriver报错问题解决了,真是无语 是因为chromedriver与浏览器版本不一致 http://chromedriver.storage.googleapis.com/index.h ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- Linux显示已经挂载的分区列表
Linux显示已经挂载的分区列表 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda8 1 ...
- Keras官方中文文档:序贯模型API
Sequential模型接口 如果刚开始学习Sequential模型,请首先移步这里阅读文档,本节内容是Sequential的API和参数介绍. 常用Sequential属性 model.layers ...
- 【CF235C】Cyclical Quest(后缀自动机)
[CF235C]Cyclical Quest(后缀自动机) 题面 洛谷 题解 大致翻译: 给定一个串 然后若干组询问 每次也给定一个串 这个串可以旋转(就是把最后一位丢到最前面这样子) 问这个串以及其 ...
- (luogu P3358)最长k可重区间集问题 [TPLY]
最长k可重区间集问题 题目链接 https://www.luogu.org/problemnew/show/3358 做法 所有点向下一个点连容量为k费用为0的边 l和r连容量为1费用为区间长度的边 ...
- [LNOI2014] LCA
题目描述: 网址:http://www.lydsy.com/JudgeOnline/problem.php?id=3626 大意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0). 一个点的 ...
- [Luogu3527][POI2011]MET-Meteors
BZOJ权限题!提供洛谷链接! sol 昨晚突发奇想去学了一下整体二分. 这道题应该算是整体二分的板子题吧. 整体二分 首先要求可离线,不然还是安心码数据结构吧. 整体二分简单的来讲,就是时间复杂度可 ...
- THUWC2018咸鱼记
Day -inf 好不容易联赛水进来了 好虚啊...(萌新)什么都不会...只会大水题 估计要\(GG\)了,瑟瑟发抖 准备辣.. 自我介绍根本没面试,就没脸贴了 周围的大佬们(尤其\(Zsy\))还 ...
- [BZOJ4292] [PA2015] Równanie
Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数. Input 第 ...
- 通过Java WebService接口从服务端下载文件
一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...
- Oracle数据文件丢失,数据库如何打开或恢复
(一)如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失.SQL>startup mount--ARCHIVELOG模式命令SQL>Alter database datafile ...