Python3はHTMLTestRunner.pyを使用してImportErrorを報告します:「StringIO」という名前のモジュールはありません



Python3 Uses Htmltestrunner



Python3はHTMLTestRunner.pyを使用してImportErrorを報告します:「StringIO」という名前のモジュールはありませんソリューション:

1.その理由は、公式ウェブサイトがpython2構文で書かれているためです。公式ウェブサイトのHTMLTestRunner.pyを手動でpython3の構文に変更しました。



参照: http://bbs.chinaunix.net/thread-4154743-1-1.html

ダウンロードリンク: http://tungwaiyip.info/software/HTMLTestRunner.html



変更されたダウンロードアドレス: http://pan.baidu.com/s/1dEZQ0pz (レイジーダウンロード直接)

2.変更の概要:

94行目、importStringIOをimportioに変更します



539行目で、self.outputBuffer = StringIO.StringIO()をself.outputBuffer = io.StringIO()に変更します。

642行目で、rmap.has_key(cls)がない場合は次のように変更します。rmapのclsでない場合は次のように変更します。

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))

Python 3.4でHTMLTestRunnerを使用すると、最初に、エラーを報告するためにHTMLTestRunnerモジュールが導入されました。

1

HTMLTestRunnerの94行では、StringIOが使用されていますが、Python3ではStringIOは使用されていません。代わりに、io.StringIOです。したがって、この行を変更してioをインポートします

二

HTMLTestRunnerの539行目で、self.outputBuffer = StringIO.StringIO()がself.outputBuffer = io.StringIO()に変更されています。

3

変更後、モジュールは正常に導入されました。

4

スクリプトコードを実行します。

画像
# -*- coding: utf-8 -*- #Introduction of the packages required by webdriver and 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 package 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__': # define a test container test = unittest.TestSuite() #Add test cases to the test container test.addTest(Baidu('test_baidu')) # Define a report storage path, support relative path file_path = 'F:\RobotTest\result.html' file_result= open(file_path, 'wb') # Runner = HTMLTestRunner.HTMLTestRunner(stream = file_result, title = u' Baidu search test report', description = u 'use case execution') #Run test case runner.run(test) file_result.close()
画像

テストスクリプトを実行した後、エラーが見つかりました:

ファイル 'C: Python34 lib HTMLTestRunner.py'、642行目、sortResult

rmap.has_key(cls)でない場合:

したがって、642行目に移動してコードを変更します。

5

実行後も引き続きエラーを報告してください。

AttributeError: 'str'オブジェクトに属性がありません 'decode'

行766、772に移動し、変更を続けます(注:766行はuoで、772行はueです。そのとき、私はこれらに気づかなかったので、同じだと思ったので、説明のつかない間違いが発生しました。長い間):

6

変更後に実行すると、別のエラーが見つかりました:

ファイル 'C: Python34 lib HTMLTestRunner.py'、行631、実行中

print >> sys.stderr、 ' n経過時間:%s'%(self.stopTime-self.startTime)

TypeError:>>のサポートされていないオペランドタイプ: 'builtin_function_or_method'および '_io.TextIOWrapper'

631に移動して、プログラム全体で唯一の印刷物を確認してください。

print >> sys.stderr、 ' n経過時間:%s'%(self.stopTime-self.startTime

これは2.xの書き方です。印刷を3.xに変更し、次のように変更します。

print(sys.stderr、 ' n経過時間:%s'%(self.stopTime-self.startTime))

転載:https://www.cnblogs.com/testyao/p/5658200.html