详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决


Posted in Python onAugust 27, 2019

python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决方法:

1.原因是官网的是python2语法写的,看官手动把官网的HTMLTestRunner.py改成python3的语法:

参考:http://bbs.chinaunix.net/thread-4154743-1-1.html

下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

修改后下载地址:HTMLTestRunner_3water.rar (懒人直接下载吧)

2.修改汇总:

第94行,将import StringIO修改成import io

第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()

第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:

第766行,将uo = o.decode('latin-1')修改成uo = e

第775行,将ue = e.decode('latin-1')修改成ue = e

第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

在Python3.4下使用HTMLTestRunner,开始时,引入HTMLTestRunner模块报错。

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

在HTMLTestRunner的94行中,是使用的StringIO,但是Python3中,已经没有StringIO了。取而代之的是io.StringIO。所以将此行修改成import io

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

在HTMLTestRunner的539行中,self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

修改以后,成功引入模块了

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

执行脚本代码:

# -*- coding: utf-8 -*-
#引入webdriver和unittest所需要的包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

#引入HTMLTestRunner包
import HTMLTestRunner  

class Baidu(unittest.TestCase):
  #初始化设置
  def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30)
    self.base_url = "http://www.baidu.com/"
    self.verificationErrors = []
    self.accept_next_alert = True
  
  #百度搜索用例
  def test_baidu(self):
    driver = self.driver
    driver.get(self.base_url)
    driver.find_element_by_id("kw").click()
    driver.find_element_by_id("kw").clear()
    driver.find_element_by_id("kw").send_keys("Selenium Webdriver")
    driver.find_element_by_id("su").click()
    time.sleep(2)
    driver.close()

  def tearDown(self):
    self.driver.quit()
    self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
  #定义一个测试容器
  test = unittest.TestSuite()

  #将测试用例,加入到测试容器中
  test.addTest(Baidu("test_baidu"))

  #定义个报告存放的路径,支持相对路径
  file_path = "F:\\RobotTest\\result.html"
  file_result= open(file_path, 'wb')

  #定义测试报告
  runner = HTMLTestRunner.HTMLTestRunner(stream = file_result, title = u"百度搜索测试报告", description = u"用例执行情况")

  #运行测试用例
  runner.run(test)
  file_result.close()

运行测试脚本后,发现报错:

File "C:\Python34\lib\HTMLTestRunner.py", line 642, in sortResult

if not rmap.has_key(cls):

所以前往642行修改代码:

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

运行后继续报错:

AttributeError: 'str' object has no attribute 'decode'

前往766, 772行继续修改(注意:766行是uo而772行是ue,当时眼瞎,没有注意到这些,以为是一样的,导致报了一些莫名其妙的错误,折腾的半天):

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

修改后运行,发现又报错:

File "C:\Python34\lib\HTMLTestRunner.py", line 631, in run

print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)

TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'

前往631查看,发现整个程序中,唯一一个print:

print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime

这个是2.x的写法,咱们修改成3.x的print,修改如下:

print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
python学生信息管理系统(完整版)
Apr 05 Python
python scp 批量同步文件的实现方法
Jan 03 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
基于python实现删除指定文件类型
Jul 21 Python
python spilt()分隔字符串的实现示例
May 21 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 Python
Python3分析处理声音数据的例子
Aug 27 #Python
python中struct模块之字节型数据的处理方法
Aug 27 #Python
Python的bit_length函数来二进制的位数方法
Aug 27 #Python
使用python将excel数据导入数据库过程详解
Aug 27 #Python
python读取指定字节长度的文本方法
Aug 27 #Python
Django中的cookie和session
Aug 27 #Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
一个简洁的多级别论坛
2006/10/09 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
python样条插值的实现代码
2018/12/17 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
MySQL学习之基础命令实操总结
2022/03/19 MySQL