详解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脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python中atexit模块的基本使用示例
Jul 08 Python
Python中字典的基础知识归纳小结
Aug 19 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
python实现二分查找算法
Sep 21 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
python代理工具mitmproxy使用指南
Jul 04 Python
给我一面国旗 python帮你实现
Sep 30 Python
python 字典套字典或列表的示例
Dec 16 Python
python 8种必备的gui库
Aug 27 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 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
深入extjs与php参数交互的详解
2013/06/25 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
js选项卡的制作方法
2017/01/23 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python入门篇之函数
2014/10/20 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python类和继承用法实例
2015/07/07 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
python 导入数据及作图的实现
2019/12/03 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Python定义一个Actor任务
2020/07/29 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
2015年招聘工作总结
2014/12/12 职场文书
男人帮观后感
2015/06/18 职场文书
社团招新宣传语
2015/07/13 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis