今天在学习selenium时遇到了两个问题,在这里记录一下;

使用unittest框架组织了测试用例后,拓展一下功能就成了我最想做的事情, 所以决定添加发邮件功能。

使用python自带的smtplib可以轻松的完成发邮件;

具体使用方法详见:

菜鸟教程——邮件教程

在编码过程发现的问题如下:

一、同时发送邮件和正文的问题

教程中没有将同时发送正文和邮件,后来通过看源码发现MIMEMultipart()类可以通过attach方法加载你所构造的参数到一个list中

在此将自己的代码发出来供大家参考,轻拍

import smtplib
from email.mime.text import MIMEText
#引入邮件正文方法
from email.header import Header
#引入邮件的标题方法
from email.mime.multipart import MIMEMultipart
#引入邮件附件方法 #创建一个发送邮件类
class send_email():
  #初始化默认信息。
def __init__(self,sender ="xxxxxxxxxxx@xxxx.cn",receiver ="xxxxxxxxxx@xx.com",
subject = 'Python email test',smtpserver = 'smtp.qiye.163.com',username = 'xxxxxxxxxxx@xxxx.cn',
password = 'xxxxxxxxxxx'):
self.sender = sender  #发件人
self.receiver = receiver  #收件人
self.subject = subject  #邮件标题
self.smtpserver = smtpserver  #邮件服务器
self.username = username  #邮箱账号
self.password = password  #邮箱密码 def send(self,Html_zhengwen_url ="",Html_fujian_url =""): ''' Html_zhengwen_url:是邮件正文的本地地址''' ''' Html_fujian_url:是邮件附件的本地地址'''
"""下面是创建Html正文,测试通过"""
with open(Html_zhengwen_url,'r',encoding='utf-8') as e : #HTML邮件正文
Html_msg =''.join(e.readlines())
att2 = MIMEText(Html_msg,'html','utf-8') #编写html类型的邮件正文
att2['Subject'] = Header(self.subject, 'utf-8') # #创建一个smtp实例
smtp = smtplib.SMTP() """下面是创建附件,测试通过"""
#创建一个附件实例
msg2 = MIMEMultipart() msg2["Subject"] = Header(self.subject, 'utf-8')
#构造附件1
att1 = MIMEText(open(Html_fujian_url, 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="text.html"' #这里的filename可以任意写,写什么名字,邮件中显示什么名字 '''同时发送邮件和正文,分别给attach方法传参att1和att2'''
msg2.attach(att1)
msg2.attach(att2) try:
smtp.connect(self.smtpserver)
smtp.login(self.username, self.password)
smtp.sendmail(self.sender, self.receiver, msg2.as_string()) #这里的msg.as_string,可以改为msg2
except Exception as e:
print(e)
finally:
smtp.quit()

二、地址格式转换问题

由于基础不牢,导致在最简单的字符串拼接是闹出笑话。

问题和地址有关;

比如:给变量A赋值一个地址

line ="11.html"

A =" C:\Program Files (x86)\Python36-32\Scripts\"+line      #错误写法

因为\是转义字符,line这个变量是不能直接被程序使用的,所以我想直接在字符串前加r,结果发现这种方式行不通,会报错。

A =(r" C:\Program Files (x86)\Python36-32\Scripts\")+line  #错误写法

后来想了想改成了双反斜杠,这样就能正常调用了。

A=" C:\\Program Files (x86)\\Python36-32\\Scripts\\"+line

其实也可以这样,

A =(r" C:\Program Files (x86)\Python36-32\Scripts\\")+line

也可以将反斜杠改为正斜杠,在Windows和Linux下都能使用。

今天的记录就到这里。

牢记教训,夯实基础。

selenium-python问题日记的更多相关文章

  1. selenium + python自动化测试环境搭建

    selenium的在python平台的搭建: 搭建平台windows 准备工具如下: --------------------------------------------------------- ...

  2. Page Object Model (Selenium, Python)

    时间 2015-06-15 00:11:56  Qxf2 blog 原文  http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...

  3. selenium + python 多浏览器测试

    selenium + python 多浏览器测试 支持库包 在学习 Python + Selenium 正篇之前,先来看下对多浏览器模拟的支持.目前selenium包中已包含webdriver,hel ...

  4. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  5. <译>Selenium Python Bindings 5 - Waits

    如今,大多数的Web应用程序使用AJAX技术.当页面加载到浏览器,页面中的元素也许在不同的时间间隔内加载.这使得元素很难定位,如果在DOM中的元素没有呈现,它将抛出ElementNotVisibleE ...

  6. <译>Selenium Python Bindings 2 - Getting Started

    Simple Usage如果你已经安装了Selenium Python,你可以通过Python这样使用: #coding=gbk ''' Created on 2014年5月6日 @author: u ...

  7. <译>Selenium Python Bindings 1 - Installation

    Installation Introduction Selenium Python bindings 提供了一个简单的API来使用Selenium WebDriver编写使用功能/验收测试.通过Sel ...

  8. selenium python 第一个脚本

    为什么选择python?我的回答很简单,简单易学,功能强大! 下面看看python和selenium 2的结合是什么样子吧 一.第一个selenium python脚本: #coding = utf- ...

  9. Python 学习日记(第三周)

    知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...

  10. selenium + python自动化测试环境搭建--亲测

    环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...

随机推荐

  1. VC调试入门

    概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件.这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用. ...

  2. appium+python自动化-adb shell模拟点击事件(input tap)

    前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...

  3. Git 撤消操作

    修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用 --amend 选项重新提交: $ git commit --amend 此命令将 ...

  4. 蛋疼的SVG外部引用方式

    SVG在html页面中有两种引用方式: 1. 内联.就是直接将SVG图形写在html的svg标签中,比如: <html> <head></head> <bod ...

  5. 圆桌聚餐(cogs 729)

    «问题描述:假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri(i=1,2,3...m), .会议餐厅共有n张餐桌,每张餐桌可容纳c i(i=1,2...n) 个代表就餐.为了 ...

  6. Radio Transmission(bzoj 1355)

    Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1, ...

  7. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  8. android调用邮件应用发送email

    直接贴代码: Intent intent = new Intent(android.content.Intent.ACTION_SEND); // 附件 File file = new File(En ...

  9. LeetCode OJ--Valid Parentheses

    http://oj.leetcode.com/problems/valid-parentheses/ 对栈的考察,看括号的使用方式是否合法. class Solution { public: bool ...

  10. oracle分区表备份恢复

    https://blog.csdn.net/jc_benben/article/details/51546815