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 ...
随机推荐
- 【mongodb系统学习之四】查看mongodb进程
四.查看mongodb进程(可以配合启动和关闭使用): 1).方法一:直接查看mongodb进程是否已经存在(用上面的方式启动后,需要另开一个窗口操作):ps –ef|grep mongodb, 如图 ...
- 【原】Java学习笔记028 - 集合
package cn.temptation; import java.util.HashSet; import java.util.Set; public class Sample01 { publi ...
- 通过ApplicationContext.getBean(beanName)动态加载数据。
一,前台数据 $.ajax({ url: '/intra/coe/order/ploadTable.htm', type: 'POST', dataType: 'json', data: {keyId ...
- 小程序中点击input控件键盘弹出时placeholder文字上移
最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...
- 在laravel环境下将图片存入MongoDB数据库
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Codeforces Round #466 (Div. 2) 题解
人生中第三次\(CF\)... 考试中切了\(A\)~\(E\) \(F\)题会做没时间写 题解 A:Points on the line 题意 给定一个数列,删最小的数,使最大差不大于一个定值 So ...
- animate 动画滞后执行的解决方案
jQuery动画: animate 容易出现连续触发.滞后反复执行的现象: 针对 jQuery 中 slideUp.slideDown.animate 等动画运用时出现的滞后反复执行等问题的解决方法有 ...
- CyQ.data MDataTable
前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分享和分布式 ...
- HashMap中的resize以及死链的情况
之前我已经写过关于HashMap的内容了:http://www.cnblogs.com/wang-meng/p/7545725.html 我们都知道HashMap是线程不安全的, 如果多线程来访问会有 ...
- Starting a Gradle Daemon, 5 busy and 1 incompatible and 1 stopped Daemons could not be reused, use --status for details FAILURE: Build failed with an exception. * What went wrong: Could not dispatch
执行gradle build出的问题,查看hs_err_pid11064.log日志文件发现,是电脑的RAM不足导致