详解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遍历指定文件及文件夹的方法
May 09 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
django解决跨域请求的问题
Nov 11 Python
python仿evething的文件搜索器实例代码
May 13 Python
详解Python传入参数的几种方法
May 16 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
公认8个效率最高的爬虫框架
Jul 28 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
python 将Excel转Word的示例
Mar 02 Python
一行Python命令实现批量加水印
Apr 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
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
PHP 裁剪图片
2021/03/09 PHP
JS日历 推荐
2006/12/03 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
详解Python中用于计算指数的exp()方法
2015/05/14 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Django-imagekit的使用详解
2020/07/06 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
九年级政治教学反思
2014/02/06 职场文书
中秋寄语大全
2014/04/11 职场文书
党课心得体会范文
2014/09/09 职场文书
旷课检讨书范文
2014/10/30 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
发布会邀请函
2015/01/31 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android