详解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 相关文章推荐
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Python中文件的读取和写入操作
Apr 27 Python
python删除文本中行数标签的方法
May 31 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Python魔法方法 容器部方法详解
Jan 02 Python
详解python破解zip文件密码的方法
Jan 13 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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
PHP数组实例总结与说明
2011/08/23 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
js 页面输出值
2008/11/30 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
python实现文件路径和url相互转换的方法
2015/07/06 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
十一个高级MySql面试题
2014/10/06 面试题
几个判断型的面试题
2012/07/03 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
2015年教师节慰问信
2015/03/23 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
《比的意义》教学反思
2016/02/18 职场文书