详解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脚本使得web页面上的代码高亮显示
Apr 24 Python
详细分析python3的reduce函数
Dec 05 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python 阶乘累加和的实例
Feb 01 Python
使用Python实现跳一跳自动跳跃功能
Jul 10 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
python可迭代对象去重实例
May 15 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 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判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
利用Python演示数型数据结构的教程
2015/04/03 Python
python创建和删除目录的方法
2015/04/29 Python
分析Python中解析构建数据知识
2018/01/20 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
写出一个方法实现冒泡排序
2016/07/08 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
拾金不昧感谢信
2015/01/21 职场文书
田径运动会通讯稿
2015/07/18 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
高一英语教学反思
2016/03/03 职场文书
详解Python中__new__方法的作用
2022/03/31 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android