详解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 31 Python
Python入门篇之字符串
Oct 17 Python
详解Python中的多线程编程
Apr 09 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
python实现SMTP邮件发送功能
Jun 16 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
python配置grpc环境
Jan 01 Python
解决Python使用列表副本的问题
Dec 19 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
php读取mysql的简单实例
2014/01/15 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python基础教程之类class定义使用方法
2014/02/20 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python代码实现图书管理系统
2020/11/30 Python
商务日语毕业生自荐信范文
2013/11/14 职场文书
心理健康教育制度
2014/01/27 职场文书
供电工程专业求职信
2014/08/09 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2019公司管理制度
2019/04/19 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs