今天是学习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. NetBeans导入项目jar路径错误解决办法

    NetBeans导入项目jar路径错误解决办法 1.NetBeans中导入项目jar路径出错,单击项目右键,选择"属性",找到"库" 2.找到错误jar,全部勾 ...

  2. 错误代码: 1248 Every derived table must have its own alias

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT stu_id, (SELECT stu_name FROM t ...

  3. Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定

    1.错误描述 Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定 2.错误原因 3.解决办法

  4. nested exception is java.sql.SQLException: IO 错误

    1.错误描述 (mx.messaging.messages::ErrorMessage)#0 body = (null) clientId = "18CE3B03-9709-9DA8-763 ...

  5. 芝麻HTTP: Scrapy小技巧-MySQL存储

    这两天上班接手,别人留下来的爬虫发现一个很好玩的 SQL脚本拼接. 只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理 ...

  6. Tomcat 代码方式启动

    配置好参数,只需在Booter类中调用 EmbbedTomcat.main(args); 就可以启动. maven中也需要配置相应插件. import java.io.File; import org ...

  7. Vasya and Basketball CodeForces - 493C

    Vasya follows a basketball game and marks the distances from which each team makes a throw. He knows ...

  8. 拥抱.NET Core系列:MemoryCache 缓存域

    在上一篇“<拥抱.NET Core系列:MemoryCache 缓存选项>”我们介绍了一些 MSCache 的机制,今天我们来介绍一下 MSCache 中的缓存域. MSCache项目 M ...

  9. Spring AOP介绍

    1.介绍 AOP(面向切面编程)对OOP(面向对象编程)是一种补充,它提供了另一种程序结构的思路.OOP的模块单元是class,而AOP的模块单元是aspect.Spring中一个关键的组件是AOP框 ...

  10. C#总结(六)EventBus事件总线的使用-自己实现事件总线

    在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的 ...