详解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文件夹与文件的操作实现代码
Jul 13 Python
Python数据结构之单链表详解
Sep 12 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python生成短uuid的方法实例详解
May 29 Python
python实现括号匹配的思路详解
Aug 23 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
python机器学习实现决策树
Nov 11 Python
详解python UDP 编程
Aug 24 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 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和ACCESS写聊天室(一)
2006/10/09 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
php blowfish加密解密算法
2016/07/02 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
python skimage 连通性区域检测方法
2018/06/21 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python 遍历pd.Series的index和value
2019/11/26 Python
python异常处理和日志处理方式
2019/12/24 Python
python实现批量修改文件名
2020/03/23 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
会计毕业生求职简历的自我评价
2013/10/20 职场文书
求职导师推荐信范文
2015/03/27 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
五年级作文之成长
2019/09/16 职场文书
用Python提取PDF表格的方法
2021/04/11 Python