今天是学习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自动化测试学习笔记(四)的更多相关文章

  1. selenium2自动化测试学习笔记(一)

    从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...

  2. selenium2自动化测试学习笔记(五)-参数化编程,自动登陆网易QQ邮箱

    学习python下使用selenium2自动测试第6天,参数化编程这节课花了两天时间. 本次编程主要时间是花在熟悉python上 知识点or坑点: 1.读取txt.xml.csv等文件存储的账号.密码 ...

  3. selenium2自动化测试学习笔记(三)

    今天是学习selenium的第三天,今天的主题是自动登录126邮箱. 今天总结碰到的坑有三个: 1.frame内元素抓取,使用driver.switch_to.frame(frameId)方法切换锁定 ...

  4. selenium2自动化测试学习笔记(二)

    chromedriver报错问题解决了,真是无语 是因为chromedriver与浏览器版本不一致 http://chromedriver.storage.googleapis.com/index.h ...

  5. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  6. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  7. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. vxWorks应用程序加载的另一种办法

    现在我们的工作中,应用程序一般都是和BSP联编,然后将vxworks_rom.bin烧到班子里.在BSP启动后,调用应用程序的函数的. 但是这样有个问题,就是应用程序和BSP结合的太紧密了.BSP开发 ...

  2. 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法

    安装 ​pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...

  3. openfec的学习笔记

    openfec实现了多种纠删码的算法实现,就包括Reed-Solomon算法.其基本使用流程为:输入n个原始包的分组后,计算生成k个额外的冗余包,后续将这n+k包送到接收端,若发生原始包丢包,但只要总 ...

  4. 剑指offer 第十天

    37.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数. 采用二分查找法 /* 方法一:时间复杂度O(n),不可选 */ public class Solution { public i ...

  5. intra调用order

    response = orderMessageService.apply(mdpRequest[A1] ); public interface OrderMessageService[A2] { pu ...

  6. Aspose实现Office转PDF (ASP.NET)

    0.添加Aspose的DLL 1.可以直接去官网下载,不过默认是带水印的,如需去除水印可以购买 2.当然也可以在国内的一些下载站下载 3.将Aspose.Cells.dll.Aspose.Words. ...

  7. 【BZOJ2684】【CEOI2004】锯木厂选址(斜率优化,动态规划)

    [BZOJ2684][CEOI2004]锯木厂选址(斜率优化,动态规划) 题面 万恶的BZOJ因为权限题的原因而做不了... 我要良心的提供题面 Description 从山顶上到山底下沿着一条直线种 ...

  8. 【NOIP2012】开车旅行(倍增)

    题面 Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 ...

  9. [BZOJ1112] [POI2008] 砖块Klo (treap)

    Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次 ...

  10. oracle数据库和表的操作

    一.字符函数 (1)连接符 concat --连接符 select concat('10086','-')||'1531234567' 电话号 from dual; (2)首字母大写 initcap ...