Python+Selenium+Webdriver+unittest 实现登录126邮箱
第一版:登录
#encoding=utf-8
import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys class setPageLoadTime(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() def test_PageLoadTime(self):
# 设定页面加载限制时间为4秒
self.driver.set_page_load_timeout(4) #重点,限制超时时间
self.driver.maximize_window()
try:
startTime = time.time()
self.driver.get("http://mail.126.com")
except TimeoutException:
print (u'页面加载超过设定时间,超时')
# 当页面加载时间超过设定时间,
# 通过执行Javascript来stop加载,然后继续执行后续动作
self.driver.execute_script('window.stop()')
end = time.time() - startTime
print (end)
# 切换进frame控件
self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]"))
# 获取用户名输入框
time.sleep(5)
userName = self.driver.find_element_by_xpath("//input[@data-placeholder='邮箱帐号或手机号码']")
# 输入用户名
userName.send_keys("******")
# 获取密码输入框
pwd = self.driver.find_element_by_xpath("//input[@data-placeholder='输入密码' and @name='password']")
# 输入密码
pwd.send_keys("*******")
# 发送一个回车键
pwd.send_keys(Keys.RETURN)
time.sleep(5)
assert u"退出" in self.driver.page_source def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()
结果:

第二版:登录+发送邮件
#encoding=utf-8
import unittest,time,traceback
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException,NoSuchElementException
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By class TestDemo(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() def test_SouhuMailSendMail(self):
# 设定页面加载限制时间为4秒
self.driver.set_page_load_timeout(4)
self.driver.maximize_window()
try:
self.driver.get("http://mail.126.com")
except TimeoutException:
print (u'页面加载超过设定时间,超时')
self.driver.execute_script('window.stop()')
try:
# 切换进frame控件
self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]"))
#time.sleep(5)
# 用户名
userName = self.driver.find_element_by_xpath("//input[@data-placeholder='邮箱帐号或手机号码']")
userName.send_keys("****")
# 密码
pwd = self.driver.find_element_by_xpath("//input[@data-placeholder='输入密码' and @name='password']")
pwd.send_keys("****")
# 登录按钮,回车代替
pwd.send_keys(Keys.RETURN)
# 显式等待,确认页面成功登录并跳转到登录成功后的首页
wait = WebDriverWait(self.driver,10)
wait.until(EC.element_to_be_clickable((By.XPATH,'//span[text()="写 信"]')))
time.sleep(2)
self.driver.find_element_by_xpath('//span[text()="写 信"]').click()
time.sleep(2)
# 输入收件人
receiver = self.driver.find_element_by_xpath("//*[contains(@id,'_mail_emailinput')]//input")
receiver.send_keys("****")
# 输入邮件标题
subject = self.driver.find_element_by_xpath('//*[contains(@id,"subjectInput")]')
subject.send_keys(u"这是一封测试邮件")
# 获取邮件正文的富文本框
iframe = self.driver.find_element_by_xpath("//*[contains(@id,'editor')]//iframe")
self.driver.switch_to.frame(iframe)
editBox = self.driver.find_element_by_xpath("/html/body")
editBox.send_keys(u"邮件正文内容")
self.driver.switch_to.default_content()
# 点击发送按钮
self.driver.find_element_by_xpath("//span[.='发送']").click()
# 显式等待发送成功元素是否出现在页面上
wait.until(EC.visibility_of_element_located((By.XPATH,"//*[contains(@id,'succInfo')]")))
print(u"邮件发送成功")
except TimeoutException:
print(u"显式等待页面元素超时")
except NoSuchElementException:
print(u"寻找的页面元素不存在",traceback.print_exc()) def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()
结果:

Python+Selenium+Webdriver+unittest 实现登录126邮箱的更多相关文章
- 【Selenium】【BugList8】126邮箱定位不到“退出”按钮:Message: TypeError: can't access dead object
[流程描述] 登录126邮箱,退出 [代码] #coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() #dr ...
- python selenium 使用unittest 示例
python selenium 使用unittest 示例 并等待某个元素示例 from selenium.webdriver.support.ui import WebDriverWait from ...
- Python+Selenium+webdriver环境搭建(windows)以及相关资源下载链接
今天记录一下测试小菜鸟alter在测试入门的一点关于python+Selenium+webdriver环境搭建的经历以及资源分享.欢迎交流学习,批评指正. 一.Python的下载与安装 1.pytho ...
- python selenium webdriver入门基本操作
python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...
- Python Selenium Webdriver常用方法总结
Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...
- python webdriver firefox 登录126邮箱,先添加联系人,然后进入首页发送邮件,带附件。
代码:#encoding=utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom ...
- python webdriver 显示等待-自动登录126邮箱,添加联系人
脚本内容:#encoding=utf-8#author-夏晓旭from selenium import webdriverimport timefrom selenium.webdriver.supp ...
- python+selenium实现经京东登录+购物+支付
import json from time import sleep from selenium import webdriver import chardet from selenium.webdr ...
- python+selenium自动化禅道登录测试
本文以禅道登录测试为例,思路主要分openBrowser.openUrl.findElement.sendVals.checkResult.ReadUserdate六部分 openBrowser de ...
- 4、python+selenium实现12306模拟登录
简介: 这里是利用了selenium+图片识别验证,来实现12306的模拟登录,中间也参考了好几个项目,实现了这个小demo,中间也遇到了很多的坑,主要难点在于图片识别和滑动验证这两个方面,图片识别是 ...
随机推荐
- WPF-封装自定义雷达图控件
源码地址:https://gitee.com/LiuShuiRuoBing/code_blog 雷达图用于表示不同内容的占比关系,在项目中有广泛的应用,但是目前未曾有封装良好的雷达图控件,鉴于最近项目 ...
- WPF MVVM之点滴分享
(第五点:绑定源有修改) 我并不打算长篇累牍的介绍什么是MVVM.我尽量简洁的介绍,并把自己的经验分享给大家. 一.关于MVVM M:Model,数据模型(后台存储数据的类) V:View,视图(大部 ...
- RabbitMQ 如何实现延迟队列?
延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息. 延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单. 给活跃度比较低的用户间隔 N ...
- 《Python魔法大冒险》004 第一个魔法程序
在图书馆的一个安静的角落,魔法师和小鱼坐在一张巨大的桌子前.桌子上摆放着那台神秘的笔记本电脑. 魔法师: 小鱼,你已经学会了如何安装魔法解释器和代码编辑器.是时候开始编写你的第一个Python魔法程序 ...
- Dockcer上传hub和配置国内镜像源
Dockcer上传hub和配置国内镜像源 1.Dockcer上传hub 要将本地的Docker镜像上传到Docker镜像仓库,可以按照以下步骤操作: linux环境 1.创建用户 首先,确保你已经在D ...
- Solution -「营业」「CF 527C」Glass Carving
Description Link. 有一个块 \(n\times m\) 的矩形,有 \(q\) 次操作,每次把矩形横 / 竖着切一刀,问切完后的最大矩形面积. Solution 一个不同于大多数人. ...
- 内网离线安装docker并配置使用nexus为docker私服
背景 本文简单记录下最近在内网服务器离线安装docker及配置nexus作为docker私服,踩的一些坑.docker和k8s这块技术我跟得不是很紧,18年的时候用过一阵docker,后来发现它并不能 ...
- 深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法
引言: 在 C++ 中,ostringstream.istringstream 和 stringstream 是三个非常有用的字符串流类,它们允许我们以流的方式处理字符串数据.本文将深入探讨这三个类的 ...
- Go语言常用标准库——flag
文章目录 os.Args flag包基本使用 导入flag包 flag参数类型 定义命令行flag参数 flag.Type() flag.TypeVar() flag.Parse() flag其他函数 ...
- PostgreSQL学习笔记-7.基础知识:子查询、自增、PRIVILEGES 权限
子查询 子查询或称为内部查询.嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句.一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询可以与 SELEC ...