liumiaomiao 3 years ago
parent
commit
cd1419c736
98 changed files with 41904 additions and 2014 deletions
  1. BIN
      base/__pycache__/base_apge.cpython-37.pyc
  2. 5 0
      base/base_apge.py
  3. BIN
      cases/1非登录/__pycache__/__st__.cpython-37.pyc
  4. BIN
      cases/1非登录/__pycache__/登录成功.cpython-37.pyc
  5. 9 1
      cases/1非登录/__st__.py
  6. 3 0
      cases/1非登录/登录成功.py
  7. BIN
      cases/2普通会员登录/__pycache__/__st__.cpython-37.pyc
  8. 6 0
      cases/2普通会员登录/__st__.py
  9. BIN
      cases/2普通会员登录/中标必听课/中标必听课详情页/__pycache__/__st__.cpython-37.pyc
  10. BIN
      cases/2普通会员登录/中标必听课/中标必听课详情页/__pycache__/课程详情页.cpython-37.pyc
  11. 10 1
      cases/2普通会员登录/中标必听课/中标必听课详情页/__st__.py
  12. 2 1
      cases/2普通会员登录/中标必听课/中标必听课详情页/课程详情页.py
  13. BIN
      cases/2普通会员登录/文库/__pycache__/文库搜索.cpython-37.pyc
  14. BIN
      cases/3大会员登录/__pycache__/__st__.cpython-37.pyc
  15. BIN
      cases/3大会员登录/__pycache__/大会员使用页面.cpython-37.pyc
  16. 7 1
      cases/3大会员登录/__st__.py
  17. 9 0
      cases/3大会员登录/大会员使用页面.py
  18. BIN
      cases/3大会员登录/大会员工作台/__pycache__/__st__.cpython-37.pyc
  19. BIN
      cases/3大会员登录/大会员工作台/__pycache__/大会员工作台--常用功能.cpython-37.pyc
  20. 6 0
      cases/3大会员登录/大会员工作台/__st__.py
  21. BIN
      cases/3大会员登录/大会员工作台/中标企业预测/__pycache__/__st__.cpython-37.pyc
  22. 3 1
      cases/3大会员登录/大会员工作台/中标企业预测/__st__.py
  23. BIN
      cases/3大会员登录/大会员工作台/企业情报监控/__pycache__/__st__.cpython-37.pyc
  24. 3 1
      cases/3大会员登录/大会员工作台/企业情报监控/__st__.py
  25. 12 11
      cases/3大会员登录/大会员工作台/大会员工作台--常用功能.py
  26. BIN
      cases/4超级订阅用户登录/__pycache__/__st__.cpython-37.pyc
  27. 7 1
      cases/4超级订阅用户登录/__st__.py
  28. BIN
      cases/__pycache__/__st__.cpython-37.pyc
  29. 0 3
      cases/__st__.py
  30. BIN
      log/imgs/20220602094153898710.png
  31. 628 0
      log/log_20220601_153917.html
  32. 643 0
      log/log_20220601_154144.html
  33. 621 0
      log/log_20220601_154423.html
  34. 621 0
      log/log_20220601_173210.html
  35. 590 0
      log/log_20220601_173705.html
  36. 590 0
      log/log_20220601_174044.html
  37. 1028 0
      log/log_20220601_174725.html
  38. 3142 0
      log/log_20220601_175057.html
  39. 828 0
      log/log_20220601_180651.html
  40. 845 0
      log/log_20220601_181845.html
  41. 907 0
      log/log_20220601_182152.html
  42. 827 0
      log/log_20220601_182944.html
  43. 689 0
      log/log_20220601_183217.html
  44. 765 0
      log/log_20220601_183550.html
  45. 751 0
      log/log_20220601_184308.html
  46. 709 0
      log/log_20220601_184512.html
  47. 709 0
      log/log_20220601_185131.html
  48. 759 0
      log/log_20220601_185949.html
  49. 703 0
      log/log_20220601_190102.html
  50. 731 0
      log/log_20220601_190650.html
  51. 731 0
      log/log_20220601_190948.html
  52. 731 0
      log/log_20220601_191146.html
  53. 3093 0
      log/log_20220601_191334.html
  54. 444 0
      log/log_20220602_090642.html
  55. 515 0
      log/log_20220602_090919.html
  56. 492 0
      log/log_20220602_091155.html
  57. 2936 0
      log/log_20220602_091401.html
  58. 569 0
      log/log_20220602_092827.html
  59. 577 0
      log/log_20220602_093439.html
  60. 2723 0
      log/log_20220602_093705.html
  61. 757 0
      log/log_20220602_100621.html
  62. 757 0
      log/log_20220602_101021.html
  63. 665 0
      log/log_20220602_101409.html
  64. 485 0
      log/log_20220602_101703.html
  65. 453 0
      log/log_20220602_102454.html
  66. 452 0
      log/log_20220602_102813.html
  67. 430 0
      log/log_20220602_103831.html
  68. 422 0
      log/log_20220602_103953.html
  69. 445 0
      log/log_20220602_104228.html
  70. 628 0
      log/log_20220602_104316.html
  71. 451 0
      log/log_20220602_104742.html
  72. 474 0
      log/log_20220602_105031.html
  73. 433 0
      log/log_20220602_105327.html
  74. 433 0
      log/log_20220602_105531.html
  75. 441 0
      log/log_20220602_110402.html
  76. 721 0
      log/log_20220602_110522.html
  77. 449 0
      log/log_20220602_111145.html
  78. 441 0
      log/log_20220602_111446.html
  79. 703 0
      log/log_20220602_111609.html
  80. 396 0
      log/log_20220602_112000.html
  81. 442 0
      log/log_20220602_112042.html
  82. 442 0
      log/log_20220602_112127.html
  83. 470 0
      log/log_20220602_112504.html
  84. 21 138
      log/testresult.log
  85. 56 25
      log/testresult.log.1
  86. 25 1814
      log/testresult.log.2
  87. BIN
      pageobject/__pycache__/bigmember_bidforecast.cpython-37.pyc
  88. BIN
      pageobject/__pycache__/bigmember_bidforecast_detail_page.cpython-37.pyc
  89. BIN
      pageobject/__pycache__/bigmember_index_page.cpython-37.pyc
  90. BIN
      pageobject/__pycache__/bigmember_main_page.cpython-37.pyc
  91. BIN
      pageobject/__pycache__/bigmember_monitor_page.cpython-37.pyc
  92. BIN
      pageobject/__pycache__/login_page.cpython-37.pyc
  93. 5 0
      pageobject/bigmember_bidforecast.py
  94. 1 1
      pageobject/bigmember_bidforecast_detail_page.py
  95. 3 1
      pageobject/bigmember_index_page.py
  96. 8 7
      pageobject/bigmember_main_page.py
  97. 1 1
      pageobject/bigmember_monitor_page.py
  98. 15 6
      pageobject/login_page.py

BIN
base/__pycache__/base_apge.cpython-37.pyc


+ 5 - 0
base/base_apge.py

@@ -81,6 +81,11 @@ class BasePage:
         wd = GSTORE['wd']
         wd = GSTORE['wd']
         js = "var q=document.documentElement.scrollTop=30"  # documentElement表示获取根节点元素
         js = "var q=document.documentElement.scrollTop=30"  # documentElement表示获取根节点元素
         wd.execute_script(js)
         wd.execute_script(js)
+    #浏览器上滑500像素
+    def slide_upward1000(self):
+        wd = GSTORE['wd']
+        js = "var q=document.documentElement.scrollTop=1000"  # documentElement表示获取根节点元素
+        wd.execute_script(js)
     #返回浏览器上一页
     #返回浏览器上一页
     def back_to_previous_page(self):
     def back_to_previous_page(self):
         wd = GSTORE['wd']
         wd = GSTORE['wd']

BIN
cases/1非登录/__pycache__/__st__.cpython-37.pyc


BIN
cases/1非登录/__pycache__/登录成功.cpython-37.pyc


+ 9 - 1
cases/1非登录/__st__.py

@@ -1,2 +1,10 @@
-
+import time
+from pageobject.index_page import ip
+from pageobject.login_page import lp
 force_tags = ['登录']
 force_tags = ['登录']
+def suite_setup():
+    time.sleep(3)
+    lp.go_to_login()
+def suite_teardown():
+    ip.go_to_index()
+    time.sleep(3)

+ 3 - 0
cases/1非登录/登录成功.py

@@ -1,3 +1,5 @@
+import time
+
 from hytest import *
 from hytest import *
 from pageobject.login_page import lp
 from pageobject.login_page import lp
 force_tags = ['用户名密码登录']
 force_tags = ['用户名密码登录']
@@ -12,3 +14,4 @@ class LoginWeb:
     # 退出登录
     # 退出登录
     def teardown(self):
     def teardown(self):
         lp.exit_web()
         lp.exit_web()
+        time.sleep(3)

BIN
cases/2普通会员登录/__pycache__/__st__.cpython-37.pyc


+ 6 - 0
cases/2普通会员登录/__st__.py

@@ -5,7 +5,13 @@ import time
 force_tags = ['免费用户登录']
 force_tags = ['免费用户登录']
 def suite_setup():
 def suite_setup():
     INFO('登录网站')
     INFO('登录网站')
+    lp.go_to_login()
     lp.free_login()
     lp.free_login()
     time.sleep(3)
     time.sleep(3)
     ip.close_news_frame()
     ip.close_news_frame()
+    time.sleep(3)
+def suite_teardown():
+    ip.go_to_index()
+    time.sleep(3)
+    lp.exit_web()
     time.sleep(3)
     time.sleep(3)

BIN
cases/2普通会员登录/中标必听课/中标必听课详情页/__pycache__/__st__.cpython-37.pyc


BIN
cases/2普通会员登录/中标必听课/中标必听课详情页/__pycache__/课程详情页.cpython-37.pyc


+ 10 - 1
cases/2普通会员登录/中标必听课/中标必听课详情页/__st__.py

@@ -1,4 +1,13 @@
+import time
+
+from pageobject.bigmember_main_page import bm
 from pageobject.course_index_page import ci
 from pageobject.course_index_page import ci
+from pageobject.index_page import ip
+
 def suite_setup():
 def suite_setup():
     #点击进入中标必听课详情页
     #点击进入中标必听课详情页
-    ci.go_to_detail()
+    ci.go_to_detail()
+def suite_teardown():
+    #关闭当前窗口,切换到第一个窗口
+    bm.close_bigwindow()
+    time.sleep(3)

+ 2 - 1
cases/2普通会员登录/中标必听课/中标必听课详情页/课程详情页.py

@@ -1,5 +1,6 @@
 from hytest import *
 from hytest import *
 from pageobject.course_detail_page import cd
 from pageobject.course_detail_page import cd
+
 force_tags = ['中标必听课详情页']
 force_tags = ['中标必听课详情页']
 class CourseDetail:
 class CourseDetail:
     name='课程标题'
     name='课程标题'
@@ -28,4 +29,4 @@ class CourseDetail03:
     name='课程试看'
     name='课程试看'
     def teststeps(self):
     def teststeps(self):
         info=cd.check_try()
         info=cd.check_try()
-        CHECK_POINT('判断课程是否能够试看',info=='该视频不可试看')
+        CHECK_POINT('判断课程是否能够试看',info=='该视频不可试看')

BIN
cases/2普通会员登录/文库/__pycache__/文库搜索.cpython-37.pyc


BIN
cases/3大会员登录/__pycache__/__st__.cpython-37.pyc


BIN
cases/3大会员登录/__pycache__/大会员使用页面.cpython-37.pyc


+ 7 - 1
cases/3大会员登录/__st__.py

@@ -1,10 +1,16 @@
+from pageobject.index_page import ip
 from pageobject.right_navigation_page import rb
 from pageobject.right_navigation_page import rb
 from pageobject.login_page import lp
 from pageobject.login_page import lp
 from hytest import *
 from hytest import *
 import time
 import time
+force_tags = ['大会员登录']
 def suite_setup():
 def suite_setup():
     INFO('登录网站')
     INFO('登录网站')
+    lp.go_to_login()
     lp.login_web()
     lp.login_web()
     time.sleep(3)
     time.sleep(3)
-    rb.click_bigmember()
+def suite_teardown():
+    ip.go_to_index()
+    time.sleep(3)
+    lp.exit()
     time.sleep(3)
     time.sleep(3)

+ 9 - 0
cases/3大会员登录/大会员使用页面.py

@@ -1,7 +1,16 @@
+import time
+
 from pageobject.bigmember_index_page import bi
 from pageobject.bigmember_index_page import bi
 from hytest import *
 from hytest import *
+
+from pageobject.index_page import ip
+
+
 class BigMember:
 class BigMember:
     name='大会员用户登录'
     name='大会员用户登录'
+    def setup(self):
+        ip.go_to_bigmember()
+        time.sleep(3)
     def teststeps(self):
     def teststeps(self):
         text=bi.use_now()
         text=bi.use_now()
         CHECK_POINT('验证大会员用户登录后,是否是立即使用按钮',text=='立即使用')
         CHECK_POINT('验证大会员用户登录后,是否是立即使用按钮',text=='立即使用')

BIN
cases/3大会员登录/大会员工作台/__pycache__/__st__.cpython-37.pyc


BIN
cases/3大会员登录/大会员工作台/__pycache__/大会员工作台--常用功能.cpython-37.pyc


+ 6 - 0
cases/3大会员登录/大会员工作台/__st__.py

@@ -0,0 +1,6 @@
+import time
+from pageobject.right_navigation_page import rb
+force_tags = ['大会员登录11']
+def suite_setup():
+    rb.click_bigmember()
+    time.sleep(3)

BIN
cases/3大会员登录/大会员工作台/中标企业预测/__pycache__/__st__.cpython-37.pyc


+ 3 - 1
cases/3大会员登录/大会员工作台/中标企业预测/__st__.py

@@ -2,4 +2,6 @@ from pageobject.bigmember_main_page import bm
 
 
 
 
 def suite_setup():
 def suite_setup():
-    bm.go_to_forecast()
+    bm.go_to_forecast()
+def suite_teardown():
+    bm.close_bigwindow()

BIN
cases/3大会员登录/大会员工作台/企业情报监控/__pycache__/__st__.cpython-37.pyc


+ 3 - 1
cases/3大会员登录/大会员工作台/企业情报监控/__st__.py

@@ -2,4 +2,6 @@ from pageobject.bigmember_main_page import bm
 
 
 
 
 def suite_setup():
 def suite_setup():
-    bm.go_to_monitor()
+    bm.go_to_monitor()
+def suite_teardown():
+    bm.close_bigwindow()

+ 12 - 11
cases/3大会员登录/大会员工作台/大会员工作台--常用功能.py

@@ -1,12 +1,12 @@
 from pageobject.bigmember_main_page import bm
 from pageobject.bigmember_main_page import bm
 from hytest import *
 from hytest import *
-class BigMain01:
-    name='大会员工作台页面--常用功能招标搜索'
-    def teststeps(self):
-        url1= bm.click_bidsearch()
-        CHECK_POINT('验证点击招标搜索,是否跳转到招标搜索页面',url1=='https://www.jianyu360.cn/jylab/supsearch/index.html?publishtime=thisyear')
-    def teardown(self):
-        bm.close_bigwindow()
+# class BigMain01:
+#     name='大会员工作台页面--常用功能招标搜索'
+#     def teststeps(self):
+#         url1= bm.click_bidsearch()
+#         CHECK_POINT('验证点击招标搜索,是否跳转到招标搜索页面',url1=='https://www.jianyu360.cn/jylab/supsearch/index.html?publishtime=thisyear')
+#     def teardown(self):
+#         bm.close_bigwindow()
 class BigMain02:
 class BigMain02:
     name='大会员工作台页面--常用功能企业搜索'
     name='大会员工作台页面--常用功能企业搜索'
     def teststeps(self):
     def teststeps(self):
@@ -17,14 +17,15 @@ class BigMain02:
 class BigMain03:
 class BigMain03:
     name='大会员工作台页面--常用功能订阅管理'
     name='大会员工作台页面--常用功能订阅管理'
     def teststeps(self):
     def teststeps(self):
-        url= bm.click_enterprisesearch()
+        url= bm.click_subscription()
         CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
         CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
     def teardown(self):
     def teardown(self):
         bm.close_bigwindow()
         bm.close_bigwindow()
+
 class BigMain04:
 class BigMain04:
     name='大会员工作台页面--常用功能数据自助导出'
     name='大会员工作台页面--常用功能数据自助导出'
     def teststeps(self):
     def teststeps(self):
-        url= bm.click_enterprisesearch()
+        url= bm.click_data()
         CHECK_POINT('验证点击数据自助导出,是否跳转到数据自助导出页面',url=='https://www.jianyu360.cn/front/dataExport/toSieve')
         CHECK_POINT('验证点击数据自助导出,是否跳转到数据自助导出页面',url=='https://www.jianyu360.cn/front/dataExport/toSieve')
     def teardown(self):
     def teardown(self):
         bm.close_bigwindow()
         bm.close_bigwindow()
@@ -32,7 +33,7 @@ class BigMain04:
 class BigMain05:
 class BigMain05:
     name='大会员工作台页面--常用功能数据导出记录'
     name='大会员工作台页面--常用功能数据导出记录'
     def teststeps(self):
     def teststeps(self):
-        url= bm.click_enterprisesearch()
+        url= bm.click_record()
         CHECK_POINT('验证点击数据导出记录,是否跳转到数据导出记录页面',url=='https://www.jianyu360.cn/front/dataPack/index?type=history')
         CHECK_POINT('验证点击数据导出记录,是否跳转到数据导出记录页面',url=='https://www.jianyu360.cn/front/dataPack/index?type=history')
     def teardown(self):
     def teardown(self):
         bm.close_bigwindow()
         bm.close_bigwindow()
@@ -40,7 +41,7 @@ class BigMain05:
 class BigMain06:
 class BigMain06:
     name='添加常用功能'
     name='添加常用功能'
     def teststeps(self):
     def teststeps(self):
-        expected=[6,'标讯收藏']
+        expected=[5,'标讯收藏']
         bm.add_common_fuction()
         bm.add_common_fuction()
         num,new_function=bm.get_list_num()
         num,new_function=bm.get_list_num()
         actural=[num,new_function]
         actural=[num,new_function]

BIN
cases/4超级订阅用户登录/__pycache__/__st__.cpython-37.pyc


+ 7 - 1
cases/4超级订阅用户登录/__st__.py

@@ -5,7 +5,13 @@ import time
 force_tags = ['超级订阅用户登录']
 force_tags = ['超级订阅用户登录']
 def suite_setup():
 def suite_setup():
     INFO('登录网站')
     INFO('登录网站')
+    lp.go_to_login()
     lp.super_login()
     lp.super_login()
     time.sleep(3)
     time.sleep(3)
     ip.close_news_frame()
     ip.close_news_frame()
-    time.sleep(5)
+    time.sleep(5)
+def suite_teardown():
+    ip.go_to_index()
+    time.sleep(3)
+    lp.exit()
+    time.sleep(3)

BIN
cases/__pycache__/__st__.cpython-37.pyc


+ 0 - 3
cases/__st__.py

@@ -1,5 +1,4 @@
 import time
 import time
-
 from hytest import *
 from hytest import *
 from base.base_apge import bp
 from base.base_apge import bp
 from pageobject.skip_ads_page import sk
 from pageobject.skip_ads_page import sk
@@ -9,8 +8,6 @@ def suite_setup():
     bp.open_brower()
     bp.open_brower()
     # INFO('跳过广告')
     # INFO('跳过广告')
     sk.SkipAds()
     sk.SkipAds()
-    time.sleep(3)
-    lp.go_to_login()
 def suite_teardown():
 def suite_teardown():
     INFO('suite_teardown')
     INFO('suite_teardown')
     wd = GSTORE['wd']
     wd = GSTORE['wd']

BIN
log/imgs/20220602094153898710.png


+ 628 - 0
log/log_20220601_153917.html

@@ -0,0 +1,628 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 15:39:17</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 15:40:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>74.628 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>4</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:39:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 15:39:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 15:39:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 15:39:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 15:39:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case fail" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 15:39:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\1非登录\登录成功.py&quot;, line 11, in teststeps
+    CHECK_POINT('设置检查点,验证是否登录成功',success)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;退出&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\登录成功.py&quot;, line 14, in teardown
+    lp.exit_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 56, in exit_web
+    bp.click(self.exit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;退出&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 15:39:49</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 15:39:59</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.free_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 31, in free_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 15:40:10</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 15:40:20</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:40:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 643 - 0
log/log_20220601_154144.html

@@ -0,0 +1,643 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 15:41:44</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 15:43:07</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>83.103 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:41:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 15:42:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 15:42:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 15:42:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 15:42:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 15:42:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\登录成功.py&quot;, line 14, in teardown
+    lp.exit_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 56, in exit_web
+    bp.click(self.exit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 15:42:24</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\__st__.py&quot;, line 6, in suite_teardown
+    lp.close_login_box()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 72, in close_login_box
+    bp.click(self.close_loginbox)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 15:42:35</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.free_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 31, in free_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 15:42:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 15:42:55</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:43:05</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 621 - 0
log/log_20220601_154423.html

@@ -0,0 +1,621 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 15:44:23</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 15:45:20</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>56.259 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:44:23</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 15:44:38</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 15:44:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 15:44:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 15:44:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 15:44:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 15:44:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\__st__.py&quot;, line 6, in suite_teardown
+    lp.close_login_box()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 72, in close_login_box
+    bp.click(self.close_loginbox)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 15:44:47</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.free_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 31, in free_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 15:44:57</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 15:45:07</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 15:45:18</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 621 - 0
log/log_20220601_173210.html

@@ -0,0 +1,621 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 17:32:10</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 17:33:17</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>66.887 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:32:10</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 17:32:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 17:32:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 17:32:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 17:32:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 17:32:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 17:32:42</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\__st__.py&quot;, line 6, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:32:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.free_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 31, in free_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:32:54</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 17:33:04</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:33:14</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 590 - 0
log/log_20220601_173705.html

@@ -0,0 +1,590 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 17:37:05</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 17:37:53</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.534 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:37:05</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 17:37:22</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 17:37:22</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 17:37:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 17:37:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 17:37:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:37:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.free_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 31, in free_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:37:31</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 17:37:41</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:37:51</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 590 - 0
log/log_20220601_174044.html

@@ -0,0 +1,590 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 17:40:44</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 17:41:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.119 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:40:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 17:41:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 17:41:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 17:41:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 17:41:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 17:41:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:41:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.go_to_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 20, in go_to_login
+    bp.click(self.login_Loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:41:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.login_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 26, in login_web
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 17:41:19</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:41:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 1028 - 0
log/log_20220601_174725.html

@@ -0,0 +1,1028 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 17:47:25</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 17:48:31</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>66.287 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>12</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">7</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">5</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:47:25</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 17:47:31</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 17:47:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 17:47:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 17:47:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 17:47:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 17:47:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:47:47</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.go_to_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 20, in go_to_login
+    bp.click(self.login_Loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:47:48</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 17:48:05</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员使用页面.py&quot;, line 6, in teststeps
+    text=bi.use_now()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 36, in use_now
+    use_text=bp.obtain_key(self.buy_local,'textContent')
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 118, in obtain_key
+    return self.locator_element(loc).get_attribute(element)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能招标搜索</span>
+              <span class="executetime">2022-06-01 17:48:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain01</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能招标搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 6, in teststeps
+    url1= bm.click_bidsearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 34, in click_bidsearch
+    default_url=self.click_function(self.common_bidsearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能招标搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 17:48:28</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 13, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:48:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 3142 - 0
log/log_20220601_175057.html

@@ -0,0 +1,3142 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 17:50:57</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 17:54:48</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>231.043 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>52</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>18</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">31</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">7</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">34</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:50:57</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 17:51:10</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 17:51:19</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 17:51:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 17:51:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 17:51:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 17:51:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 17:51:27</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:51:35</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-01 17:51:48</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-01 17:51:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-01 17:52:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-01 17:52:05</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-01 17:52:07</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-01 17:52:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-01 17:52:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-01 17:52:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-01 17:52:12</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-01 17:52:17</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\1大会员落地页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\1大会员落地页.py</span>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">未购买大会员点击立即购买</span>
+              <span class="executetime">2022-06-01 17:52:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\1大会员落地页.py::BuyNow</span>
+              <div class="test_steps" id="test_steps 未购买大会员点击立即购买">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证首次进入购买页是否默认选中商机版</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 未购买大会员点击立即购买">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\2大会员购买页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\2大会员购买页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+              <span class="executetime">2022-06-01 17:52:36</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+          </div>
+          <div class="case pass" id="case_00000013">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及1年</span>
+              <span class="executetime">2022-06-01 17:52:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000014">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及2年</span>
+              <span class="executetime">2022-06-01 17:52:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000015">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及3年</span>
+              <span class="executetime">2022-06-01 17:52:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000016">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及1年</span>
+              <span class="executetime">2022-06-01 17:52:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000017">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及2年</span>
+              <span class="executetime">2022-06-01 17:52:48</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000018">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及3年</span>
+              <span class="executetime">2022-06-01 17:52:48</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+              <span class="executetime">2022-06-01 17:52:48</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\3大会员留资页面\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\3大会员留资页面\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+              <span class="executetime">2022-06-01 17:52:55</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py</span>
+          </div>
+          <div class="case abort" id="case_00000019">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员留资</span>
+              <span class="executetime">2022-06-01 17:52:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py::BigmemberDrainage</span>
+              <div class="test_steps" id="test_steps 大会员留资">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 7, in teststeps
+    actural=bd.drainage_success()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 23, in drainage_success
+    bi.click_experience()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 32, in click_experience
+    bp.click(self.experience_local)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员留资">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 10, in teardown
+    bd.click_iknow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 28, in click_iknow
+    bp.click(self.i_know)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-01 17:53:14</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-01 17:53:18</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\企业搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\企业搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000020">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业搜索---bidwin_test2001</span>
+              <span class="executetime">2022-06-01 17:53:31</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\企业搜索.py::BidWinSearch</span>
+              <div class="test_steps" id="test_steps 企业搜索---bidwin_test2001">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>搜索结果三级页正常打开,中标企业显示和搜索一致</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 企业搜索---bidwin_test2001">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\企业搜索.py&quot;, line 15, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 141, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\信息详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\信息详情页.py</span>
+          </div>
+          <div class="case abort" id="case_00000021">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test01</span>
+              <span class="executetime">2022-06-01 17:54:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage01</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 12, in teststeps
+    expect=dp.get_detailpage_element(actual_word)
+  File &quot;E:\project\jianyu_auto\pageobject\detail_page.py&quot;, line 28, in get_detailpage_element
+    sp.go_to_detailpage(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 21, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 141, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000022">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test03</span>
+              <span class="executetime">2022-06-01 17:54:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage03</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 28, in teststeps
+    sp.go_to_detailpage('甘肃省水利厅水土保持局网上商城合同')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 34, in teardown
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 199, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py</span>
+          </div>
+          <div class="case abort" id="case_00000023">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">招标搜索---search_test04</span>
+              <span class="executetime">2022-06-01 17:54:45</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py::BidSearch01</span>
+              <div class="test_steps" id="test_steps 招标搜索---search_test04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 19, in teststeps
+    lists=sp.get_list(actual_keys)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 招标搜索---search_test04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 25, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 141, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\拟建项目\__st__.py&quot;, line 4, in suite_setup
+    sp.go_to_proposedproject()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 66, in go_to_proposedproject
+    bp.click(self.proposed_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\条件搜索\__st__.py&quot;, line 5, in suite_setup
+    sp.send_searchinput_key('税务局')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 350, in send_searchinput_key
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\__st__.py&quot;, line 9, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\文库\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\文库\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\文库\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\文库\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\文库\__st__.py&quot;, line 5, in suite_setup
+    ip.go_to_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 484, in go_to_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py</span>
+          </div>
+          <div class="case abort" id="case_00000024">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">验证三级页标讯收藏是否成功</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py::test01</span>
+              <div class="test_steps" id="test_steps 验证三级页标讯收藏是否成功">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 13, in teststeps
+    sp.go_to_search()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 74, in go_to_search
+    bp.click(self.search_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 验证三级页标讯收藏是否成功">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 20, in teardown
+    bp.back_to_previous_page()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 87, in back_to_previous_page
+    wd.back()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 813, in back
+    self.execute(Command.GO_BACK)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页头部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页头部导航功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000025">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部会员链接检查--index_head</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink</span>
+              <div class="test_steps" id="test_steps 首页头部会员链接检查--index_head">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_head_member()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 193, in check_head_member
+    bp.click(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部会员链接检查--index_head">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000026">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部超级订阅链接检查--index_head01</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页头部超级订阅链接检查--index_head01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_head_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 199, in check_head_subscribe
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部超级订阅链接检查--index_head01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000027">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部大会员链接检查--index_head02</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页头部大会员链接检查--index_head02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_head_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 206, in check_head_bigmember
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部大会员链接检查--index_head02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000028">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商机管理链接检查--index_head021</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink021</span>
+              <div class="test_steps" id="test_steps 首页头部商机管理链接检查--index_head021">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 39, in teststeps
+    excepted=ip.check_opportunity()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 213, in check_opportunity
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商机管理链接检查--index_head021">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 42, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000029">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部自助导出链接检查--index_head03</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页头部自助导出链接检查--index_head03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 49, in teststeps
+    excepted=ip.check_head_export()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 220, in check_head_export
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部自助导出链接检查--index_head03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 52, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000030">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部定制服务链接检查--index_head04</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页头部定制服务链接检查--index_head04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 59, in teststeps
+    excepted=ip.check_head_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 227, in check_head_structured
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部定制服务链接检查--index_head04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 62, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000031">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标必听课链接检查--index_head05</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页头部中标必听课链接检查--index_head05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 69, in teststeps
+    excepted=ip.check_head_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 234, in check_head_course
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标必听课链接检查--index_head05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 72, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000032">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部剑鱼文库链接检查--index_head06</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 79, in teststeps
+    excepted=ip.check_head_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 241, in check_head_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 82, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000033">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标预测链接检查--index_head07</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink07</span>
+              <div class="test_steps" id="test_steps 首页头部中标预测链接检查--index_head07">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 89, in teststeps
+    excepted=ip.check_head_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 248, in check_head_forecast
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标预测链接检查--index_head07">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 92, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000034">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在客户挖掘链接检查--index_head08</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink08</span>
+              <div class="test_steps" id="test_steps 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 99, in teststeps
+    excepted=ip.check_head_customer()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 255, in check_head_customer
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 102, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000035">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在合作伙伴挖掘链接检查--index_head09</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink09</span>
+              <div class="test_steps" id="test_steps 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 109, in teststeps
+    excepted=ip.check_head_partner()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 262, in check_head_partner
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 112, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000036">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部招标决策分析链接检查--index_head10</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink10</span>
+              <div class="test_steps" id="test_steps 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 119, in teststeps
+    excepted=ip.check_head_decision()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 269, in check_head_decision
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 122, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000037">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部竞争对手分析链接检查--index_head11</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink11</span>
+              <div class="test_steps" id="test_steps 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 129, in teststeps
+    excepted = ip.check_head_compete()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 276, in check_head_compete
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 132, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000038">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部市场分析链接检查--index_head12</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink12</span>
+              <div class="test_steps" id="test_steps 首页头部市场分析链接检查--index_head12">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 139, in teststeps
+    excepted = ip.check_head_market_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 283, in check_head_market_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部市场分析链接检查--index_head12">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 142, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000039">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部客户分析链接检查--index_head13</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink13</span>
+              <div class="test_steps" id="test_steps 首页头部客户分析链接检查--index_head13">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 149, in teststeps
+    excepted = ip.check_head_customer_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 290, in check_head_customer_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部客户分析链接检查--index_head13">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 152, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000040">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部关于我们链接检查--index_head14</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink14</span>
+              <div class="test_steps" id="test_steps 首页头部关于我们链接检查--index_head14">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 159, in teststeps
+    ad = ip.check_head_understand()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 318, in check_head_understand
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部关于我们链接检查--index_head14">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 163, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000041">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商务合作链接检查--index23</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink23</span>
+              <div class="test_steps" id="test_steps 首页头部商务合作链接检查--index23">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 171, in teststeps
+    excepted = ip.check_head_cooperation()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 297, in check_head_cooperation
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商务合作链接检查--index23">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 174, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000042">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部广告服务链接检查--index24</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink24</span>
+              <div class="test_steps" id="test_steps 首页头部广告服务链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 181, in teststeps
+    excepted = ip.check_head_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 304, in check_head_ad
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部广告服务链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 184, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000043">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部产品销售合作链接检查--index24</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页头部产品销售合作链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 191, in teststeps
+    excepted = ip.check_head_sale()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 311, in check_head_sale
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 208, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部产品销售合作链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 194, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页广告位功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页广告位功能检查.py</span>
+          </div>
+          <div class="case fail" id="case_00000044">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页左侧广告位链接检查--index25</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页左侧广告位链接检查--index25">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页左侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 11, in teststeps
+    CHECK_POINT('检查首页左侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页左侧广告位链接检查--index25">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000045">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页右侧广告位链接检查--index26</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink26</span>
+              <div class="test_steps" id="test_steps 首页右侧广告位链接检查--index26">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页右侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 21, in teststeps
+    CHECK_POINT('检查首页右侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页右侧广告位链接检查--index26">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页底部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页底部导航功能检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页底部导航功能检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新公告功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新公告功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000046">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新公告信息链接检查--index08</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新公告功能检查.py::CheckNewest07</span>
+              <div class="test_steps" id="test_steps 首页最新公告信息链接检查--index08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_newest()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 171, in check_newest
+    lists=bp.locator_elements(self.all_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新公告信息链接检查--index08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新资讯功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新资讯功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000047">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新资讯链接检查--index06</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新资讯功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页最新资讯链接检查--index06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_news()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 152, in check_news
+    lists=bp.locator_elements(self.newlated_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新资讯链接检查--index06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页金刚区功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页金刚区功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000048">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区大会员链接检查--index01</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页金刚区大会员链接检查--index01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 120, in check_bigmember
+    bp.click(self.bigmember_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区大会员链接检查--index01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000049">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区超级订阅链接检查--index02</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页金刚区超级订阅链接检查--index02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 126, in check_subscribe
+    bp.click(self.subscribe_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区超级订阅链接检查--index02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000050">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区结构化数据链接检查--index03</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页金刚区结构化数据链接检查--index03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 133, in check_structured
+    bp.click(self.structured_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区结构化数据链接检查--index03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000051">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区中标必听课链接检查--index04</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页金刚区中标必听课链接检查--index04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 40, in teststeps
+    excepted=ip.check_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 139, in check_course
+    bp.click(self.course_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区中标必听课链接检查--index04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 43, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000052">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区数据流量包链接检查--index05</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页金刚区数据流量包链接检查--index05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 50, in teststeps
+    excepted=ip.check_datapack()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 145, in check_datapack
+    bp.click(self.data_pack_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区数据流量包链接检查--index05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 53, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 8, in suite_setup
+    lp.go_to_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 20, in go_to_login
+    bp.click(self.login_Loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 91, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 17:54:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 828 - 0
log/log_20220601_180651.html

@@ -0,0 +1,828 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:06:51</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:07:45</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>54.569 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>7</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">7</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">5</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:06:51</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:06:58</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:07:18</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员使用页面.py&quot;, line 6, in teststeps
+    text=bi.use_now()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 36, in use_now
+    use_text=bp.obtain_key(self.buy_local,'textContent')
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 118, in obtain_key
+    return self.locator_element(loc).get_attribute(element)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能招标搜索</span>
+              <span class="executetime">2022-06-01 18:07:28</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain01</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能招标搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 6, in teststeps
+    url1= bm.click_bidsearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 34, in click_bidsearch
+    default_url=self.click_function(self.common_bidsearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能招标搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 13, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 15, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:07:43</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 845 - 0
log/log_20220601_181845.html

@@ -0,0 +1,845 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:18:45</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:19:48</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>63.914 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>7</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">7</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">5</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:18:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:18:52</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:19:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员使用页面.py&quot;, line 15, in teststeps
+    text=bi.use_now()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 36, in use_now
+    use_text=bp.obtain_key(self.buy_local,'textContent')
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 118, in obtain_key
+    return self.locator_element(loc).get_attribute(element)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:19:21</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能招标搜索</span>
+              <span class="executetime">2022-06-01 18:19:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain01</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能招标搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 6, in teststeps
+    url1= bm.click_bidsearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 34, in click_bidsearch
+    default_url=self.click_function(self.common_bidsearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能招标搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 13, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:19:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 907 - 0
log/log_20220601_182152.html

@@ -0,0 +1,907 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:21:52</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:22:39</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.117 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>7</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">7</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">6</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:21:52</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:22:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:22:10</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员使用页面.py&quot;, line 15, in teststeps
+    text=bi.use_now()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 37, in use_now
+    use_text=bp.obtain_key(self.buy_local,'textContent')
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 118, in obtain_key
+    return self.locator_element(loc).get_attribute(element)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@name=&quot;全网商机线索&quot;]//div[@class=&quot;subpage-button darkblue&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:22:29</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能招标搜索</span>
+              <span class="executetime">2022-06-01 18:22:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain01</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能招标搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">'NoneType' object has no attribute 'click' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 6, in teststeps
+    url1= bm.click_bidsearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 34, in click_bidsearch
+    default_url=self.click_function(self.common_bidsearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+AttributeError: 'NoneType' object has no attribute 'click'
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能招标搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 9, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 13, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 168, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 95, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:22:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 827 - 0
log/log_20220601_182944.html

@@ -0,0 +1,827 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:29:44</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:30:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>48.483 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>7</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">6</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">5</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:29:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:29:50</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:30:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:30:08</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能招标搜索</span>
+              <span class="executetime">2022-06-01 18:30:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain01</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能招标搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 6, in teststeps
+    url1= bm.click_bidsearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 34, in click_bidsearch
+    default_url=self.click_function(self.common_bidsearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;招标搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能招标搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 13, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:30:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 689 - 0
log/log_20220601_183217.html

@@ -0,0 +1,689 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:32:17</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:33:21</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>63.836 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>2</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:32:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:32:23</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:32:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:32:41</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:32:48</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:32:54</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 21, in teststeps
+    CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:33:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    CHECK_POINT('验证点击数据自助导出,是否跳转到数据自助导出页面',url=='https://www.jianyu360.cn/front/dataExport/toSieve')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:33:07</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击数据导出记录,是否跳转到数据导出记录页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 36, in teststeps
+    CHECK_POINT('验证点击数据导出记录,是否跳转到数据导出记录页面',url=='https://www.jianyu360.cn/front/dataPack/index?type=history')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:33:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 62, in add_common_fuction
+    bp.click(self.arrow_right)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:33:16</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 539). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 87, in go_to_forecast
+    bp.click(self.bid_forecast)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 539). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:33:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 504). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 79, in go_to_monitor
+    bp.click(self.enterprise_monitoring)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 504). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:33:18</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:33:19</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 765 - 0
log/log_20220601_183550.html

@@ -0,0 +1,765 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:35:50</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:37:15</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>84.835 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>2</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:35:50</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:35:56</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:36:06</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:36:15</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:36:22</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:36:28</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 21, in teststeps
+    CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    allwindow = bp.mark_all_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 179, in mark_all_window
+    allwindow = wd.window_handles
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:36:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:36:44</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:36:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:37:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:37:05</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:37:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:37:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 751 - 0
log/log_20220601_184308.html

@@ -0,0 +1,751 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:43:08</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:44:11</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>62.710 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>2</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">5</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:43:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:43:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-01 18:43:27</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:43:36</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:43:42</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 16, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    bp.goto_old_window()
+TypeError: goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows'
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:43:45</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    bp.goto_old_window()
+TypeError: goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows'
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:43:55</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    bp.goto_old_window()
+TypeError: goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows'
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:44:05</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">'NoneType' object has no attribute 'click' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+AttributeError: 'NoneType' object has no attribute 'click'
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    bp.goto_old_window()
+TypeError: goto_old_window() missing 2 required positional arguments: 'currentwindow' and 'allwindows'
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:44:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 61, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:44:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 87, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:44:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 79, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:44:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:44:08</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 709 - 0
log/log_20220601_184512.html

@@ -0,0 +1,709 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:45:12</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:46:26</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>74.440 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">3</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:45:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:45:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:45:27</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:45:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:45:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 21, in teststeps
+    CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:45:49</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    CHECK_POINT('验证点击数据自助导出,是否跳转到数据自助导出页面',url=='https://www.jianyu360.cn/front/dataExport/toSieve')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    allwindow = bp.mark_all_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 179, in mark_all_window
+    allwindow = wd.window_handles
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:45:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:46:04</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:46:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:46:16</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:46:20</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:46:24</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 709 - 0
log/log_20220601_185131.html

@@ -0,0 +1,709 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:51:31</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 18:52:46</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>75.526 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">3</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:51:31</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:51:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 18:51:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 18:51:54</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 18:52:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 21, in teststeps
+    CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 18:52:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    CHECK_POINT('验证点击数据自助导出,是否跳转到数据自助导出页面',url=='https://www.jianyu360.cn/front/dataExport/toSieve')
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    allwindow = bp.mark_all_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 179, in mark_all_window
+    allwindow = wd.window_handles
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 18:52:16</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 18:52:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 18:52:32</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 18:52:36</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:52:40</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;C:\Users\liumiaomiao\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:52:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 759 - 0
log/log_20220601_185949.html

@@ -0,0 +1,759 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 18:59:49</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:00:31</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>42.556 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 18:59:49</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 18:59:55</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 19:00:05</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 19:00:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 19:00:19</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">'NoneType' object has no attribute 'click' 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+AttributeError: 'NoneType' object has no attribute 'click'
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 53, in close_bigwindow
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
+from unknown error: web view not found
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:00:29</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 703 - 0
log/log_20220601_190102.html

@@ -0,0 +1,703 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 19:01:02</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:02:31</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>88.506 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">2</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:01:02</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:01:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 19:01:19</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 19:01:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 19:01:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 21, in teststeps
+    CHECK_POINT('验证点击订阅管理,是否跳转到订阅管理页面',url=='https://www.jianyu360.cn/swordfish/page_big_pc/set_subscribe/config')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 19:01:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 19:01:54</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_enterprisesearch()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 38, in click_enterprisesearch
+    default_url = self.click_function(self.common_enterprisesearch_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[text()=&quot;企业搜索&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    allwindow = bp.mark_all_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 179, in mark_all_window
+    allwindow = wd.window_handles
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 19:02:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 19:02:16</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 19:02:20</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:02:24</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.WebDriverException: Message: chrome not reachable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:02:28</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 731 - 0
log/log_20220601_190650.html

@@ -0,0 +1,731 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 19:06:50</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:07:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>41.634 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:06:50</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:06:57</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 19:07:07</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 19:07:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 19:07:18</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_subscription()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 42, in click_subscription
+    default_url = self.click_function(self.common_subscription_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 56, in close_bigwindow
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_data()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 46, in click_data
+    default_url = self.click_function(self.common_data_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_record()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 50, in click_record
+    default_url = self.click_function(self.common_record_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:07:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 731 - 0
log/log_20220601_190948.html

@@ -0,0 +1,731 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 19:09:48</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:10:36</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.995 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:09:48</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:10:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 19:10:11</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 19:10:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 19:10:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_subscription()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 42, in click_subscription
+    default_url = self.click_function(self.common_subscription_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 56, in close_bigwindow
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 27, in teststeps
+    url= bm.click_data()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 46, in click_data
+    default_url = self.click_function(self.common_data_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 30, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 35, in teststeps
+    url= bm.click_record()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 50, in click_record
+    default_url = self.click_function(self.common_record_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 38, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 44, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 60, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 49, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 66, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 86, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 78, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:10:34</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 731 - 0
log/log_20220601_191146.html

@@ -0,0 +1,731 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 19:11:46</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:12:28</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>41.203 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:11:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:11:51</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-01 19:12:01</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-01 19:12:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-01 19:12:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_subscription()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 42, in click_subscription
+    default_url = self.click_function(self.common_subscription_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 56, in close_bigwindow
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    url= bm.click_data()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 46, in click_data
+    default_url = self.click_function(self.common_data_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 31, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 36, in teststeps
+    url= bm.click_record()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 50, in click_record
+    default_url = self.click_function(self.common_record_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 39, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 45, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 61, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 87, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 79, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:12:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 3093 - 0
log/log_20220601_191334.html

@@ -0,0 +1,3093 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220601 19:13:34</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220601 19:17:03</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>208.914 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>52</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>18</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">31</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">5</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">34</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:13:34</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 19:13:40</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-01 19:13:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-01 19:13:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-01 19:13:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-01 19:13:51</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-01 19:13:51</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-01 19:13:57</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\__st__.py&quot;, line 9, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 19:13:58</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-01 19:14:11</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-01 19:14:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-01 19:14:21</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-01 19:14:26</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-01 19:14:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-01 19:14:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-01 19:14:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-01 19:14:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-01 19:14:29</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-01 19:14:33</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\1大会员落地页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\1大会员落地页.py</span>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">未购买大会员点击立即购买</span>
+              <span class="executetime">2022-06-01 19:14:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\1大会员落地页.py::BuyNow</span>
+              <div class="test_steps" id="test_steps 未购买大会员点击立即购买">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证首次进入购买页是否默认选中商机版</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 未购买大会员点击立即购买">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\2大会员购买页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\2大会员购买页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+              <span class="executetime">2022-06-01 19:14:52</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+          </div>
+          <div class="case pass" id="case_00000013">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及1年</span>
+              <span class="executetime">2022-06-01 19:15:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000014">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及2年</span>
+              <span class="executetime">2022-06-01 19:15:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000015">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及3年</span>
+              <span class="executetime">2022-06-01 19:15:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000016">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及1年</span>
+              <span class="executetime">2022-06-01 19:15:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000017">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及2年</span>
+              <span class="executetime">2022-06-01 19:15:04</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000018">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及3年</span>
+              <span class="executetime">2022-06-01 19:15:04</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+              <span class="executetime">2022-06-01 19:15:04</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\3大会员留资页面\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\3大会员留资页面\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+              <span class="executetime">2022-06-01 19:15:11</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py</span>
+          </div>
+          <div class="case abort" id="case_00000019">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员留资</span>
+              <span class="executetime">2022-06-01 19:15:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py::BigmemberDrainage</span>
+              <div class="test_steps" id="test_steps 大会员留资">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 7, in teststeps
+    actural=bd.drainage_success()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 23, in drainage_success
+    bi.click_experience()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 32, in click_experience
+    bp.click(self.experience_local)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员留资">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 10, in teardown
+    bd.click_iknow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 28, in click_iknow
+    bp.click(self.i_know)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-01 19:15:30</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-01 19:15:34</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\企业搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\企业搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000020">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业搜索---bidwin_test2001</span>
+              <span class="executetime">2022-06-01 19:15:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\企业搜索.py::BidWinSearch</span>
+              <div class="test_steps" id="test_steps 企业搜索---bidwin_test2001">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>搜索结果三级页正常打开,中标企业显示和搜索一致</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 企业搜索---bidwin_test2001">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\企业搜索.py&quot;, line 15, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\信息详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\信息详情页.py</span>
+          </div>
+          <div class="case abort" id="case_00000021">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test01</span>
+              <span class="executetime">2022-06-01 19:16:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage01</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 12, in teststeps
+    expect=dp.get_detailpage_element(actual_word)
+  File &quot;E:\project\jianyu_auto\pageobject\detail_page.py&quot;, line 28, in get_detailpage_element
+    sp.go_to_detailpage(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 21, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000022">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test03</span>
+              <span class="executetime">2022-06-01 19:16:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage03</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 28, in teststeps
+    sp.go_to_detailpage('甘肃省水利厅水土保持局网上商城合同')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 34, in teardown
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py</span>
+          </div>
+          <div class="case abort" id="case_00000023">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">招标搜索---search_test04</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py::BidSearch01</span>
+              <div class="test_steps" id="test_steps 招标搜索---search_test04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 19, in teststeps
+    lists=sp.get_list(actual_keys)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 招标搜索---search_test04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 25, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\拟建项目\__st__.py&quot;, line 4, in suite_setup
+    sp.go_to_proposedproject()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 66, in go_to_proposedproject
+    bp.click(self.proposed_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\条件搜索\__st__.py&quot;, line 5, in suite_setup
+    sp.send_searchinput_key('税务局')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 350, in send_searchinput_key
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\__st__.py&quot;, line 9, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\文库\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\文库\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\文库\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\文库\</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\文库\__st__.py&quot;, line 5, in suite_setup
+    ip.go_to_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 484, in go_to_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py</span>
+          </div>
+          <div class="case abort" id="case_00000024">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">验证三级页标讯收藏是否成功</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py::test01</span>
+              <div class="test_steps" id="test_steps 验证三级页标讯收藏是否成功">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 13, in teststeps
+    sp.go_to_search()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 74, in go_to_search
+    bp.click(self.search_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 验证三级页标讯收藏是否成功">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 20, in teardown
+    bp.back_to_previous_page()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 92, in back_to_previous_page
+    wd.back()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 813, in back
+    self.execute(Command.GO_BACK)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页头部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页头部导航功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000025">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部会员链接检查--index_head</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink</span>
+              <div class="test_steps" id="test_steps 首页头部会员链接检查--index_head">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_head_member()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 193, in check_head_member
+    bp.click(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部会员链接检查--index_head">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000026">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部超级订阅链接检查--index_head01</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页头部超级订阅链接检查--index_head01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_head_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 199, in check_head_subscribe
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部超级订阅链接检查--index_head01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000027">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部大会员链接检查--index_head02</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页头部大会员链接检查--index_head02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_head_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 206, in check_head_bigmember
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部大会员链接检查--index_head02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000028">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商机管理链接检查--index_head021</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink021</span>
+              <div class="test_steps" id="test_steps 首页头部商机管理链接检查--index_head021">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 39, in teststeps
+    excepted=ip.check_opportunity()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 213, in check_opportunity
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商机管理链接检查--index_head021">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 42, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000029">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部自助导出链接检查--index_head03</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页头部自助导出链接检查--index_head03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 49, in teststeps
+    excepted=ip.check_head_export()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 220, in check_head_export
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部自助导出链接检查--index_head03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 52, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000030">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部定制服务链接检查--index_head04</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页头部定制服务链接检查--index_head04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 59, in teststeps
+    excepted=ip.check_head_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 227, in check_head_structured
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部定制服务链接检查--index_head04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 62, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000031">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标必听课链接检查--index_head05</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页头部中标必听课链接检查--index_head05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 69, in teststeps
+    excepted=ip.check_head_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 234, in check_head_course
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标必听课链接检查--index_head05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 72, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000032">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部剑鱼文库链接检查--index_head06</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 79, in teststeps
+    excepted=ip.check_head_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 241, in check_head_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 82, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000033">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标预测链接检查--index_head07</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink07</span>
+              <div class="test_steps" id="test_steps 首页头部中标预测链接检查--index_head07">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 89, in teststeps
+    excepted=ip.check_head_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 248, in check_head_forecast
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标预测链接检查--index_head07">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 92, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000034">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在客户挖掘链接检查--index_head08</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink08</span>
+              <div class="test_steps" id="test_steps 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 99, in teststeps
+    excepted=ip.check_head_customer()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 255, in check_head_customer
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 102, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000035">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在合作伙伴挖掘链接检查--index_head09</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink09</span>
+              <div class="test_steps" id="test_steps 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 109, in teststeps
+    excepted=ip.check_head_partner()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 262, in check_head_partner
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 112, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000036">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部招标决策分析链接检查--index_head10</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink10</span>
+              <div class="test_steps" id="test_steps 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 119, in teststeps
+    excepted=ip.check_head_decision()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 269, in check_head_decision
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 122, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000037">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部竞争对手分析链接检查--index_head11</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink11</span>
+              <div class="test_steps" id="test_steps 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 129, in teststeps
+    excepted = ip.check_head_compete()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 276, in check_head_compete
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 132, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000038">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部市场分析链接检查--index_head12</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink12</span>
+              <div class="test_steps" id="test_steps 首页头部市场分析链接检查--index_head12">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 139, in teststeps
+    excepted = ip.check_head_market_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 283, in check_head_market_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部市场分析链接检查--index_head12">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 142, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000039">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部客户分析链接检查--index_head13</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink13</span>
+              <div class="test_steps" id="test_steps 首页头部客户分析链接检查--index_head13">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 149, in teststeps
+    excepted = ip.check_head_customer_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 290, in check_head_customer_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部客户分析链接检查--index_head13">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 152, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000040">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部关于我们链接检查--index_head14</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink14</span>
+              <div class="test_steps" id="test_steps 首页头部关于我们链接检查--index_head14">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 159, in teststeps
+    ad = ip.check_head_understand()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 318, in check_head_understand
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部关于我们链接检查--index_head14">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 163, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000041">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商务合作链接检查--index23</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink23</span>
+              <div class="test_steps" id="test_steps 首页头部商务合作链接检查--index23">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 171, in teststeps
+    excepted = ip.check_head_cooperation()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 297, in check_head_cooperation
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商务合作链接检查--index23">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 174, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000042">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部广告服务链接检查--index24</span>
+              <span class="executetime">2022-06-01 19:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink24</span>
+              <div class="test_steps" id="test_steps 首页头部广告服务链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 181, in teststeps
+    excepted = ip.check_head_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 304, in check_head_ad
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部广告服务链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 184, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000043">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部产品销售合作链接检查--index24</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页头部产品销售合作链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 191, in teststeps
+    excepted = ip.check_head_sale()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 311, in check_head_sale
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部产品销售合作链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 194, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页广告位功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页广告位功能检查.py</span>
+          </div>
+          <div class="case fail" id="case_00000044">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页左侧广告位链接检查--index25</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页左侧广告位链接检查--index25">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页左侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 11, in teststeps
+    CHECK_POINT('检查首页左侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页左侧广告位链接检查--index25">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000045">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页右侧广告位链接检查--index26</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink26</span>
+              <div class="test_steps" id="test_steps 首页右侧广告位链接检查--index26">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页右侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 21, in teststeps
+    CHECK_POINT('检查首页右侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页右侧广告位链接检查--index26">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页底部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页底部导航功能检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页底部导航功能检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 218, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 218, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新公告功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新公告功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000046">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新公告信息链接检查--index08</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新公告功能检查.py::CheckNewest07</span>
+              <div class="test_steps" id="test_steps 首页最新公告信息链接检查--index08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_newest()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 171, in check_newest
+    lists=bp.locator_elements(self.all_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新公告信息链接检查--index08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新资讯功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新资讯功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000047">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新资讯链接检查--index06</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新资讯功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页最新资讯链接检查--index06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_news()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 152, in check_news
+    lists=bp.locator_elements(self.newlated_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新资讯链接检查--index06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页金刚区功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页金刚区功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000048">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区大会员链接检查--index01</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页金刚区大会员链接检查--index01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 120, in check_bigmember
+    bp.click(self.bigmember_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区大会员链接检查--index01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000049">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区超级订阅链接检查--index02</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页金刚区超级订阅链接检查--index02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 126, in check_subscribe
+    bp.click(self.subscribe_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区超级订阅链接检查--index02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000050">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区结构化数据链接检查--index03</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页金刚区结构化数据链接检查--index03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 133, in check_structured
+    bp.click(self.structured_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区结构化数据链接检查--index03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000051">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区中标必听课链接检查--index04</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页金刚区中标必听课链接检查--index04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 40, in teststeps
+    excepted=ip.check_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 139, in check_course
+    bp.click(self.course_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区中标必听课链接检查--index04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 43, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000052">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区数据流量包链接检查--index05</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页金刚区数据流量包链接检查--index05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 50, in teststeps
+    excepted=ip.check_datapack()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 145, in check_datapack
+    bp.click(self.data_pack_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区数据流量包链接检查--index05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 53, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-01 19:17:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 444 - 0
log/log_20220602_090642.html

@@ -0,0 +1,444 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:06:42</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:07:47</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>64.565 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:06:42</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:06:50</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:07:03</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\3大会员留资页面\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\3大会员留资页面\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+              <span class="executetime">2022-06-02 09:07:13</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员留资</span>
+              <span class="executetime">2022-06-02 09:07:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py::BigmemberDrainage</span>
+              <div class="test_steps" id="test_steps 大会员留资">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员留资信息是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员留资">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:07:26</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:07:30</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:07:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 515 - 0
log/log_20220602_090919.html

@@ -0,0 +1,515 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:09:19</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:09:48</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>29.108 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:09:19</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-02 09:09:27</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-02 09:09:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-02 09:09:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-02 09:09:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-02 09:09:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-02 09:09:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-02 09:09:44</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\1非登录\__st__.py&quot;, line 9, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:09:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 492 - 0
log/log_20220602_091155.html

@@ -0,0 +1,492 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:11:55</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:12:33</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>37.371 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:11:55</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\1非登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\1非登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-02 09:12:04</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录失败.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录失败.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test02</span>
+              <span class="executetime">2022-06-02 09:12:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test03</span>
+              <span class="executetime">2022-06-02 09:12:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb02</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证错误提示是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test05</span>
+              <span class="executetime">2022-06-02 09:12:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入用户名情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test06</span>
+              <span class="executetime">2022-06-02 09:12:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录失败.py::LoginWeb03</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,检查不输入密码情况下,登录按钮不能点击</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\1非登录\登录成功.py</span>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">用户名密码登陆---login_test01</span>
+              <span class="executetime">2022-06-02 09:12:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
+              <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>设置检查点,验证是否登录成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\1非登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\1非登录\</span>
+              <span class="executetime">2022-06-02 09:12:23</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:12:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 2936 - 0
log/log_20220602_091401.html

@@ -0,0 +1,2936 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:14:01</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:17:15</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>194.560 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>47</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>13</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">31</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">5</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">34</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:14:01</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:14:06</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:14:19</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-02 09:14:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-02 09:14:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:14:34</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-02 09:14:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-02 09:14:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-02 09:14:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-02 09:14:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:14:39</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:14:44</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\1大会员落地页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\1大会员落地页.py</span>
+          </div>
+          <div class="case pass" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">未购买大会员点击立即购买</span>
+              <span class="executetime">2022-06-02 09:14:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\1大会员落地页.py::BuyNow</span>
+              <div class="test_steps" id="test_steps 未购买大会员点击立即购买">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证首次进入购买页是否默认选中商机版</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 未购买大会员点击立即购买">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\2大会员购买页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\2大会员购买页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+              <span class="executetime">2022-06-02 09:15:03</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及1年</span>
+              <span class="executetime">2022-06-02 09:15:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及2年</span>
+              <span class="executetime">2022-06-02 09:15:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及3年</span>
+              <span class="executetime">2022-06-02 09:15:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及1年</span>
+              <span class="executetime">2022-06-02 09:15:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及2年</span>
+              <span class="executetime">2022-06-02 09:15:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000013">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及3年</span>
+              <span class="executetime">2022-06-02 09:15:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+              <span class="executetime">2022-06-02 09:15:15</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\3大会员留资页面\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\3大会员留资页面\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+              <span class="executetime">2022-06-02 09:15:22</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py</span>
+          </div>
+          <div class="case abort" id="case_00000014">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员留资</span>
+              <span class="executetime">2022-06-02 09:15:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py::BigmemberDrainage</span>
+              <div class="test_steps" id="test_steps 大会员留资">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 7, in teststeps
+    actural=bd.drainage_success()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 23, in drainage_success
+    bi.click_experience()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_index_page.py&quot;, line 32, in click_experience
+    bp.click(self.experience_local)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;div class=&quot;subpage-button gold&quot;&gt;...&lt;/div&gt; is not clickable at point (841, 23). Other element would receive the click: &lt;li name=&quot;会员&quot; class=&quot;active&quot;&gt;...&lt;/li&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员留资">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py&quot;, line 10, in teardown
+    bd.click_iknow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_drainage_page.py&quot;, line 28, in click_iknow
+    bp.click(self.i_know)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:15:40</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-02 09:15:44</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\企业搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\企业搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000015">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业搜索---bidwin_test2001</span>
+              <span class="executetime">2022-06-02 09:15:58</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\企业搜索.py::BidWinSearch</span>
+              <div class="test_steps" id="test_steps 企业搜索---bidwin_test2001">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>搜索结果三级页正常打开,中标企业显示和搜索一致</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 企业搜索---bidwin_test2001">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\企业搜索.py&quot;, line 15, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\信息详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\信息详情页.py</span>
+          </div>
+          <div class="case abort" id="case_00000016">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test01</span>
+              <span class="executetime">2022-06-02 09:16:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage01</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 12, in teststeps
+    expect=dp.get_detailpage_element(actual_word)
+  File &quot;E:\project\jianyu_auto\pageobject\detail_page.py&quot;, line 28, in get_detailpage_element
+    sp.go_to_detailpage(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 21, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000017">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">信息详情页---detailpage_test03</span>
+              <span class="executetime">2022-06-02 09:17:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage03</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 28, in teststeps
+    sp.go_to_detailpage('甘肃省水利厅水土保持局网上商城合同')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 110, in go_to_detailpage
+    lists=self.get_list(value)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;css selector&quot;,&quot;selector&quot;:&quot;[id=&quot;searchinput&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 信息详情页---detailpage_test03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 34, in teardown
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py</span>
+          </div>
+          <div class="case abort" id="case_00000018">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">招标搜索---search_test04</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py::BidSearch01</span>
+              <div class="test_steps" id="test_steps 招标搜索---search_test04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 19, in teststeps
+    lists=sp.get_list(actual_keys)
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 80, in get_list
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 招标搜索---search_test04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py&quot;, line 25, in teardown
+    sp.clear_search_input()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 120, in clear_search_input
+    bp.clear_input(self.searchinput_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 146, in clear_input
+    self.locator_element(loc).clear()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\拟建项目\__st__.py&quot;, line 4, in suite_setup
+    sp.go_to_proposedproject()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 66, in go_to_proposedproject
+    bp.click(self.proposed_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\条件搜索\__st__.py&quot;, line 5, in suite_setup
+    sp.send_searchinput_key('税务局')
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 350, in send_searchinput_key
+    bp.send_keys(self.searchinput_loc,value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\__st__.py&quot;, line 9, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\文库\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\文库\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\文库\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\文库\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\文库\__st__.py&quot;, line 5, in suite_setup
+    ip.go_to_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 484, in go_to_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py</span>
+          </div>
+          <div class="case abort" id="case_00000019">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">验证三级页标讯收藏是否成功</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py::test01</span>
+              <div class="test_steps" id="test_steps 验证三级页标讯收藏是否成功">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 13, in teststeps
+    sp.go_to_search()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 74, in go_to_search
+    bp.click(self.search_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 验证三级页标讯收藏是否成功">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 20, in teardown
+    bp.back_to_previous_page()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 92, in back_to_previous_page
+    wd.back()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 813, in back
+    self.execute(Command.GO_BACK)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页头部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页头部导航功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000020">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部会员链接检查--index_head</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink</span>
+              <div class="test_steps" id="test_steps 首页头部会员链接检查--index_head">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_head_member()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 193, in check_head_member
+    bp.click(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部会员链接检查--index_head">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000021">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部超级订阅链接检查--index_head01</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页头部超级订阅链接检查--index_head01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_head_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 199, in check_head_subscribe
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部超级订阅链接检查--index_head01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000022">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部大会员链接检查--index_head02</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页头部大会员链接检查--index_head02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_head_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 206, in check_head_bigmember
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部大会员链接检查--index_head02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000023">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商机管理链接检查--index_head021</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink021</span>
+              <div class="test_steps" id="test_steps 首页头部商机管理链接检查--index_head021">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 39, in teststeps
+    excepted=ip.check_opportunity()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 213, in check_opportunity
+    bp.mouse_over(self.member_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商机管理链接检查--index_head021">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 42, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000024">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部自助导出链接检查--index_head03</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页头部自助导出链接检查--index_head03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 49, in teststeps
+    excepted=ip.check_head_export()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 220, in check_head_export
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部自助导出链接检查--index_head03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 52, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000025">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部定制服务链接检查--index_head04</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页头部定制服务链接检查--index_head04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 59, in teststeps
+    excepted=ip.check_head_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 227, in check_head_structured
+    bp.mouse_over(self.data_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部定制服务链接检查--index_head04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 62, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000026">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标必听课链接检查--index_head05</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页头部中标必听课链接检查--index_head05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 69, in teststeps
+    excepted=ip.check_head_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 234, in check_head_course
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标必听课链接检查--index_head05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 72, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000027">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部剑鱼文库链接检查--index_head06</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 79, in teststeps
+    excepted=ip.check_head_library()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 241, in check_head_library
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 82, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000028">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部中标预测链接检查--index_head07</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink07</span>
+              <div class="test_steps" id="test_steps 首页头部中标预测链接检查--index_head07">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 89, in teststeps
+    excepted=ip.check_head_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 248, in check_head_forecast
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部中标预测链接检查--index_head07">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 92, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000029">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在客户挖掘链接检查--index_head08</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink08</span>
+              <div class="test_steps" id="test_steps 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 99, in teststeps
+    excepted=ip.check_head_customer()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 255, in check_head_customer
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 102, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000030">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部潜在合作伙伴挖掘链接检查--index_head09</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink09</span>
+              <div class="test_steps" id="test_steps 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 109, in teststeps
+    excepted=ip.check_head_partner()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 262, in check_head_partner
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 112, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000031">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部招标决策分析链接检查--index_head10</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink10</span>
+              <div class="test_steps" id="test_steps 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 119, in teststeps
+    excepted=ip.check_head_decision()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 269, in check_head_decision
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 122, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000032">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部竞争对手分析链接检查--index_head11</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink11</span>
+              <div class="test_steps" id="test_steps 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 129, in teststeps
+    excepted = ip.check_head_compete()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 276, in check_head_compete
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 132, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000033">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部市场分析链接检查--index_head12</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink12</span>
+              <div class="test_steps" id="test_steps 首页头部市场分析链接检查--index_head12">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 139, in teststeps
+    excepted = ip.check_head_market_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 283, in check_head_market_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部市场分析链接检查--index_head12">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 142, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000034">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部客户分析链接检查--index_head13</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink13</span>
+              <div class="test_steps" id="test_steps 首页头部客户分析链接检查--index_head13">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 149, in teststeps
+    excepted = ip.check_head_customer_analysis()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 290, in check_head_customer_analysis
+    bp.mouse_over(self.box_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部客户分析链接检查--index_head13">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 152, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000035">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部关于我们链接检查--index_head14</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink14</span>
+              <div class="test_steps" id="test_steps 首页头部关于我们链接检查--index_head14">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 159, in teststeps
+    ad = ip.check_head_understand()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 318, in check_head_understand
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部关于我们链接检查--index_head14">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 163, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000036">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部商务合作链接检查--index23</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink23</span>
+              <div class="test_steps" id="test_steps 首页头部商务合作链接检查--index23">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 171, in teststeps
+    excepted = ip.check_head_cooperation()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 297, in check_head_cooperation
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部商务合作链接检查--index23">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 174, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000037">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部广告服务链接检查--index24</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink24</span>
+              <div class="test_steps" id="test_steps 首页头部广告服务链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 181, in teststeps
+    excepted = ip.check_head_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 304, in check_head_ad
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部广告服务链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 184, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000038">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页头部产品销售合作链接检查--index24</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页头部产品销售合作链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 191, in teststeps
+    excepted = ip.check_head_sale()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 311, in check_head_sale
+    bp.mouse_over(self.contact_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页头部产品销售合作链接检查--index24">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页头部导航功能检查.py&quot;, line 194, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页广告位功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页广告位功能检查.py</span>
+          </div>
+          <div class="case fail" id="case_00000039">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页左侧广告位链接检查--index25</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页左侧广告位链接检查--index25">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页左侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 11, in teststeps
+    CHECK_POINT('检查首页左侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页左侧广告位链接检查--index25">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000040">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">首页右侧广告位链接检查--index26</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink26</span>
+              <div class="test_steps" id="test_steps 首页右侧广告位链接检查--index26">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检查首页右侧广告位是否存在</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 21, in teststeps
+    CHECK_POINT('检查首页右侧广告位是否存在', excepted == True)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页右侧广告位链接检查--index26">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页广告位功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页底部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页底部导航功能检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页底部导航功能检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 218, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py&quot;, line 5, in suite_setup
+    ip.close_ad()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 100, in close_ad
+    bp.execute_js(&quot;$('.bottom-member-ad').remove()&quot;)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 218, in execute_js
+    wd.execute_script(js)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 636, in execute_script
+    'args': converted_args})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新公告功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新公告功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000041">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新公告信息链接检查--index08</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新公告功能检查.py::CheckNewest07</span>
+              <div class="test_steps" id="test_steps 首页最新公告信息链接检查--index08">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_newest()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 171, in check_newest
+    lists=bp.locator_elements(self.all_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新公告信息链接检查--index08">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新公告功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新资讯功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新资讯功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000042">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页最新资讯链接检查--index06</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新资讯功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页最新资讯链接检查--index06">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 10, in teststeps
+    result=ip.check_news()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 152, in check_news
+    lists=bp.locator_elements(self.newlated_list)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 62, in locator_elements
+    return wd.find_elements(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 1007, in find_elements
+    'value': value})['value'] or []
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页最新资讯链接检查--index06">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页最新资讯功能检查.py&quot;, line 14, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页金刚区功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页金刚区功能检查.py</span>
+          </div>
+          <div class="case abort" id="case_00000043">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区大会员链接检查--index01</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页金刚区大会员链接检查--index01">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 10, in teststeps
+    excepted=ip.check_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 120, in check_bigmember
+    bp.click(self.bigmember_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区大会员链接检查--index01">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 13, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000044">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区超级订阅链接检查--index02</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页金刚区超级订阅链接检查--index02">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 20, in teststeps
+    excepted=ip.check_subscribe()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 126, in check_subscribe
+    bp.click(self.subscribe_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区超级订阅链接检查--index02">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 23, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000045">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区结构化数据链接检查--index03</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页金刚区结构化数据链接检查--index03">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 30, in teststeps
+    excepted=ip.check_structured()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 133, in check_structured
+    bp.click(self.structured_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区结构化数据链接检查--index03">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 33, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000046">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区中标必听课链接检查--index04</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页金刚区中标必听课链接检查--index04">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 40, in teststeps
+    excepted=ip.check_course()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 139, in check_course
+    bp.click(self.course_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区中标必听课链接检查--index04">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 43, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000047">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">首页金刚区数据流量包链接检查--index05</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页金刚区数据流量包链接检查--index05">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 50, in teststeps
+    excepted=ip.check_datapack()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 145, in check_datapack
+    bp.click(self.data_pack_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 首页金刚区数据流量包链接检查--index05">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\首页\首页金刚区功能检查.py&quot;, line 53, in teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:17:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 569 - 0
log/log_20220602_092827.html

@@ -0,0 +1,569 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:28:27</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:29:28</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>60.955 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:28:27</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:28:33</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:28:46</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-02 09:28:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-02 09:28:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:29:01</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-02 09:29:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-02 09:29:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-02 09:29:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-02 09:29:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:29:03</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:29:07</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:29:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 577 - 0
log/log_20220602_093439.html

@@ -0,0 +1,577 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:34:39</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:35:48</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>68.740 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:34:39</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:34:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:34:58</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-02 09:35:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-02 09:35:07</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:35:12</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-02 09:35:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-02 09:35:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-02 09:35:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-02 09:35:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:35:17</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:35:28</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:35:32</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:35:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 2723 - 0
log/log_20220602_093705.html

@@ -0,0 +1,2723 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 09:37:05</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 09:59:25</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>1340.436 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>88</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>85</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">3</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:37:05</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:37:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:37:24</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标必听课搜索</span>
+              <span class="executetime">2022-06-02 09:37:29</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex</span>
+              <div class="test_steps" id="test_steps 中标必听课搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">中标必听课课程数量</span>
+              <span class="executetime">2022-06-02 09:37:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课搜索.py::CourseIndex01</span>
+              <div class="test_steps" id="test_steps 中标必听课课程数量">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证中标必听课课程总数量是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\中标必听课\中标必听课搜索.py&quot;, line 17, in teststeps
+    CHECK_POINT('验证中标必听课课程总数量是否正确',num==26)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 中标必听课课程数量">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\中标必听课\中标必听课详情页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:37:39</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py</span>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程标题</span>
+              <span class="executetime">2022-06-02 09:37:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail</span>
+              <div class="test_steps" id="test_steps 课程标题">
+                <span class="label">测试步骤</span>
+                <div class="info">课程标题</div>
+                <div class="info">提升中标率超值集合课程!手把手教会你投标</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程基本信息</span>
+              <span class="executetime">2022-06-02 09:37:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail01</span>
+              <div class="test_steps" id="test_steps 课程基本信息">
+                <span class="label">测试步骤</span>
+                <div class="info">课程基本信息</div>
+                <div class="info">['714', '共76节', '13时32分00秒', '2026年4月15日课程过期']</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程目录</span>
+              <span class="executetime">2022-06-02 09:37:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail02</span>
+              <div class="test_steps" id="test_steps 课程目录">
+                <span class="label">测试步骤</span>
+                <div class="info">课程目录数量</div>
+                <div class="info">76</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">课程试看</span>
+              <span class="executetime">2022-06-02 09:37:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\中标必听课\中标必听课详情页\课程详情页.py::CourseDetail03</span>
+              <div class="test_steps" id="test_steps 课程试看">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>判断课程是否能够试看</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\中标必听课详情页\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\中标必听课详情页\</span>
+              <span class="executetime">2022-06-02 09:37:41</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\中标必听课\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\中标必听课\</span>
+              <span class="executetime">2022-06-02 09:37:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:37:53</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\1大会员落地页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\1大会员落地页.py</span>
+          </div>
+          <div class="case pass" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">未购买大会员点击立即购买</span>
+              <span class="executetime">2022-06-02 09:38:01</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\1大会员落地页.py::BuyNow</span>
+              <div class="test_steps" id="test_steps 未购买大会员点击立即购买">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证首次进入购买页是否默认选中商机版</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 未购买大会员点击立即购买">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\2大会员购买页\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\2大会员购买页\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\</span>
+              <span class="executetime">2022-06-02 09:38:13</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及1年</span>
+              <span class="executetime">2022-06-02 09:38:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及2年</span>
+              <span class="executetime">2022-06-02 09:38:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员商机版及3年</span>
+              <span class="executetime">2022-06-02 09:38:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedSJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员商机版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证选中商机版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及1年</span>
+              <span class="executetime">2022-06-02 09:38:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJOne</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及1年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及1年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及2年</span>
+              <span class="executetime">2022-06-02 09:38:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJTwo</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及2年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及2年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000013">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">选中大会员专家版及3年</span>
+              <span class="executetime">2022-06-02 09:38:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py::SelectedZJThree</span>
+              <div class="test_steps" id="test_steps 选中大会员专家版及3年">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击专家版及3年,应付金额是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\2大会员购买页\大会员购买页.py</span>
+              <span class="executetime">2022-06-02 09:38:24</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\大会员\3大会员留资页面\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\大会员\3大会员留资页面\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\大会员\3大会员留资页面\</span>
+              <span class="executetime">2022-06-02 09:38:32</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py</span>
+          </div>
+          <div class="case pass" id="case_00000014">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员留资</span>
+              <span class="executetime">2022-06-02 09:38:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\大会员\3大会员留资页面\大会员留资.py::BigmemberDrainage</span>
+              <div class="test_steps" id="test_steps 大会员留资">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员留资信息是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员留资">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\大会员\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\大会员\</span>
+              <span class="executetime">2022-06-02 09:38:46</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-02 09:38:50</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\企业搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\企业搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000015">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业搜索---bidwin_test2001</span>
+              <span class="executetime">2022-06-02 09:39:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\企业搜索.py::BidWinSearch</span>
+              <div class="test_steps" id="test_steps 企业搜索---bidwin_test2001">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>搜索结果三级页正常打开,中标企业显示和搜索一致</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业搜索---bidwin_test2001">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\信息详情页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\信息详情页.py</span>
+          </div>
+          <div class="case fail" id="case_00000016">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">信息详情页---detailpage_test01</span>
+              <span class="executetime">2022-06-02 09:39:44</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage01</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证三级页标题中含有搜索关键词</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\搜索\招标搜索\信息详情页.py&quot;, line 16, in teststeps
+    CHECK_POINT('验证三级页标题中含有搜索关键词',expect_keyword in actual_word)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 信息详情页---detailpage_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000017">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">信息详情页---detailpage_test03</span>
+              <span class="executetime">2022-06-02 09:40:18</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\信息详情页.py::DetailPage03</span>
+              <div class="test_steps" id="test_steps 信息详情页---detailpage_test03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证项目公告功能</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 信息详情页---detailpage_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000018">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">招标搜索---search_test04</span>
+              <span class="executetime">2022-06-02 09:40:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py::BidSearch01</span>
+              <div class="test_steps" id="test_steps 招标搜索---search_test04">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果中关键词是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 招标搜索---search_test04">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\拟建项目\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\</span>
+              <span class="executetime">2022-06-02 09:41:14</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\拟建项目\拟建搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\拟建项目\拟建搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000019">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">拟建搜索---proposed_test</span>
+              <span class="executetime">2022-06-02 09:41:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\拟建项目\拟建搜索.py::proposedSearch</span>
+              <div class="test_steps" id="test_steps 拟建搜索---proposed_test">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>搜索列表关键词正确,石家庄</span>
+                </div>
+                <div class="info">点击表格,生成图片,查看表格是否正常</div>
+                <div>
+                  <img class="screenshot" src="imgs/20220602094153898710.png" width="70%">
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 拟建搜索---proposed_test">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+              <span class="executetime">2022-06-02 09:42:02</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\条件搜索\行业条件搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\行业条件搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000020">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">行业搜索---conditional_test01</span>
+              <span class="executetime">2022-06-02 09:42:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\行业条件搜索.py::ConditionalSearch01</span>
+              <div class="test_steps" id="test_steps 行业搜索---conditional_test01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索的行业和搜索结果的行业相同</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 行业搜索---conditional_test01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000021">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">区域搜索---conditional_test02</span>
+              <span class="executetime">2022-06-02 09:42:20</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch02</span>
+              <div class="test_steps" id="test_steps 区域搜索---conditional_test02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索的区域和搜索结果的区域相同</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 区域搜索---conditional_test02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000022">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">信息类型搜索---conditional_test03</span>
+              <span class="executetime">2022-06-02 09:42:32</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch03</span>
+              <div class="test_steps" id="test_steps 信息类型搜索---conditional_test03">
+                <span class="label">测试步骤</span>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 信息类型搜索---conditional_test03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000023">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">价格搜索---test3011</span>
+              <span class="executetime">2022-06-02 09:42:45</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch04</span>
+              <div class="test_steps" id="test_steps 价格搜索---test3011">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的价格在搜索价格范围内</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 价格搜索---test3011">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000024">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">价格搜索---test3015</span>
+              <span class="executetime">2022-06-02 09:43:22</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch04</span>
+              <div class="test_steps" id="test_steps 价格搜索---test3015">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的价格在搜索价格范围内</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 价格搜索---test3015">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000025">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">发布时间搜索---test3021</span>
+              <span class="executetime">2022-06-02 09:43:58</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch05</span>
+              <div class="test_steps" id="test_steps 发布时间搜索---test3021">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的日期在搜索日期内,搜索日期:最近七天</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 发布时间搜索---test3021">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000026">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">发布时间搜索---test30211</span>
+              <span class="executetime">2022-06-02 09:44:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py::ConditionalSearch05</span>
+              <div class="test_steps" id="test_steps 发布时间搜索---test30211">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的日期在搜索日期内,搜索日期:最近1个月</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 发布时间搜索---test30211">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\搜索\招标搜索\条件搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\条件搜索\</span>
+              <span class="executetime">2022-06-02 09:44:23</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\搜索\招标搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\搜索\招标搜索\</span>
+              <span class="executetime">2022-06-02 09:44:30</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\2普通会员登录\文库\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\2普通会员登录\文库\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\文库\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\文库\</span>
+              <span class="executetime">2022-06-02 09:44:35</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库三级页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库三级页.py</span>
+          </div>
+          <div class="case pass" id="case_00000027">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库三级页</span>
+              <span class="executetime">2022-06-02 09:44:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库三级页.py::LibraryDetail</span>
+              <div class="test_steps" id="test_steps 文库三级页">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库三级页是否能打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库三级页">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库下载.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库下载.py</span>
+          </div>
+          <div class="case pass" id="case_00000028">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文档下载</span>
+              <span class="executetime">2022-06-02 09:44:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库下载.py::LibraryDownload</span>
+              <div class="test_steps" id="test_steps 文档下载">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>文档下载成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文档下载">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库兑换.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库兑换.py</span>
+          </div>
+          <div class="case pass" id="case_00000029">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文档兑换</span>
+              <span class="executetime">2022-06-02 09:44:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库兑换.py::LibraryExchange</span>
+              <div class="test_steps" id="test_steps 文档兑换">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>文档兑换成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文档兑换">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000030">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库搜索--全部类型</span>
+              <span class="executetime">2022-06-02 09:45:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库搜索.py::LibrarySearch</span>
+              <div class="test_steps" id="test_steps 文库搜索--全部类型">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库搜索-搜全部是否正常</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库搜索--全部类型">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000031">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库搜索--招标文件</span>
+              <span class="executetime">2022-06-02 09:45:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库搜索.py::LibrarySearch1</span>
+              <div class="test_steps" id="test_steps 文库搜索--招标文件">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库搜索-搜招标文件类型是否正常</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库搜索--招标文件">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000032">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库搜索--法律法规</span>
+              <span class="executetime">2022-06-02 09:45:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库搜索.py::LibrarySearch2</span>
+              <div class="test_steps" id="test_steps 文库搜索--法律法规">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库搜索-搜法律法规类型是否正常</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 文库搜索--法律法规">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;el-input__suffix&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\2普通会员登录\文库\文库搜索.py&quot;, line 30, in teardown
+    lp.clear_search()
+  File &quot;E:\project\jianyu_auto\pageobject\library_page.py&quot;, line 98, in clear_search
+    bp.click(self.delete_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;el-input__suffix&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000033">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库搜索--标准规范</span>
+              <span class="executetime">2022-06-02 09:45:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库搜索.py::LibrarySearch3</span>
+              <div class="test_steps" id="test_steps 文库搜索--标准规范">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库搜索-搜标准规范类型是否正常</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库搜索--标准规范">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000034">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库搜索--行业报告</span>
+              <span class="executetime">2022-06-02 09:45:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库搜索.py::LibrarySearch4</span>
+              <div class="test_steps" id="test_steps 文库搜索--行业报告">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库搜索-搜行业报告类型是否正常</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库搜索--行业报告">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库收藏.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库收藏.py</span>
+          </div>
+          <div class="case pass" id="case_00000035">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库收藏</span>
+              <span class="executetime">2022-06-02 09:46:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库收藏.py::LibraryCollection</span>
+              <div class="test_steps" id="test_steps 文库收藏">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证收藏是否成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库收藏">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000036">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库取消收藏</span>
+              <span class="executetime">2022-06-02 09:46:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库收藏.py::LibraryCollection1</span>
+              <div class="test_steps" id="test_steps 文库取消收藏">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证取消收藏是否成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 文库取消收藏">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\文库\文库首页.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\文库\文库首页.py</span>
+          </div>
+          <div class="case pass" id="case_00000037">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库首页--最新文档,热门下载</span>
+              <span class="executetime">2022-06-02 09:46:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库首页.py::LibraryIndex</span>
+              <div class="test_steps" id="test_steps 文库首页--最新文档,热门下载">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库首页最新文档,热门下载是否正常</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000038">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">文库首页--精选推荐</span>
+              <span class="executetime">2022-06-02 09:46:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\文库\文库首页.py::LibraryIndex1</span>
+              <div class="test_steps" id="test_steps 文库首页--精选推荐">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证文库首页精选推荐是否正常</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\文库\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\文库\</span>
+              <span class="executetime">2022-06-02 09:46:24</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py</span>
+          </div>
+          <div class="case fail" id="case_00000039">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">验证三级页标讯收藏是否成功</span>
+              <span class="executetime">2022-06-02 09:46:28</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py::test01</span>
+              <div class="test_steps" id="test_steps 验证三级页标讯收藏是否成功">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证收藏是否成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\2普通会员登录\标讯收藏\标讯收藏是否成功.py&quot;, line 18, in teststeps
+    CHECK_POINT('验证收藏是否成功',expect=='甘肃省水利厅水土保持局网上商城合同')
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 验证三级页标讯收藏是否成功">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页头部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页头部导航功能检查.py</span>
+          </div>
+          <div class="case pass" id="case_00000040">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部会员链接检查--index_head</span>
+              <span class="executetime">2022-06-02 09:47:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink</span>
+              <div class="test_steps" id="test_steps 首页头部会员链接检查--index_head">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部会员链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部会员链接检查--index_head">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000041">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部超级订阅链接检查--index_head01</span>
+              <span class="executetime">2022-06-02 09:47:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页头部超级订阅链接检查--index_head01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部超级订阅链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部超级订阅链接检查--index_head01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000042">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部大会员链接检查--index_head02</span>
+              <span class="executetime">2022-06-02 09:47:34</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页头部大会员链接检查--index_head02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部大会员链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部大会员链接检查--index_head02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000043">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部商机管理链接检查--index_head021</span>
+              <span class="executetime">2022-06-02 09:47:42</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink021</span>
+              <div class="test_steps" id="test_steps 首页头部商机管理链接检查--index_head021">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部商机管理链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部商机管理链接检查--index_head021">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000044">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部自助导出链接检查--index_head03</span>
+              <span class="executetime">2022-06-02 09:47:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页头部自助导出链接检查--index_head03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部自助导出链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部自助导出链接检查--index_head03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000045">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部定制服务链接检查--index_head04</span>
+              <span class="executetime">2022-06-02 09:47:58</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页头部定制服务链接检查--index_head04">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部定制服务链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部定制服务链接检查--index_head04">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000046">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部中标必听课链接检查--index_head05</span>
+              <span class="executetime">2022-06-02 09:48:07</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页头部中标必听课链接检查--index_head05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部中标必听课链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部中标必听课链接检查--index_head05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000047">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部剑鱼文库链接检查--index_head06</span>
+              <span class="executetime">2022-06-02 09:48:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部剑鱼文库链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部剑鱼文库链接检查--index_head06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000048">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部中标预测链接检查--index_head07</span>
+              <span class="executetime">2022-06-02 09:48:23</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink07</span>
+              <div class="test_steps" id="test_steps 首页头部中标预测链接检查--index_head07">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部中标预测链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部中标预测链接检查--index_head07">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000049">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部潜在客户挖掘链接检查--index_head08</span>
+              <span class="executetime">2022-06-02 09:48:31</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink08</span>
+              <div class="test_steps" id="test_steps 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部潜在客户挖掘链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部潜在客户挖掘链接检查--index_head08">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000050">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部潜在合作伙伴挖掘链接检查--index_head09</span>
+              <span class="executetime">2022-06-02 09:48:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink09</span>
+              <div class="test_steps" id="test_steps 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部潜在合作伙伴挖掘链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部潜在合作伙伴挖掘链接检查--index_head09">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000051">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部招标决策分析链接检查--index_head10</span>
+              <span class="executetime">2022-06-02 09:48:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink10</span>
+              <div class="test_steps" id="test_steps 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部招标决策分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部招标决策分析链接检查--index_head10">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000052">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部竞争对手分析链接检查--index_head11</span>
+              <span class="executetime">2022-06-02 09:48:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink11</span>
+              <div class="test_steps" id="test_steps 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部竞争对手分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部竞争对手分析链接检查--index_head11">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000053">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部市场分析链接检查--index_head12</span>
+              <span class="executetime">2022-06-02 09:49:05</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink12</span>
+              <div class="test_steps" id="test_steps 首页头部市场分析链接检查--index_head12">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部市场分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部市场分析链接检查--index_head12">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000054">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部客户分析链接检查--index_head13</span>
+              <span class="executetime">2022-06-02 09:49:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink13</span>
+              <div class="test_steps" id="test_steps 首页头部客户分析链接检查--index_head13">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部客户分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部客户分析链接检查--index_head13">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000055">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部关于我们链接检查--index_head14</span>
+              <span class="executetime">2022-06-02 09:49:21</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink14</span>
+              <div class="test_steps" id="test_steps 首页头部关于我们链接检查--index_head14">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部了解剑鱼标讯链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部关于我们链接检查--index_head14">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000056">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部商务合作链接检查--index23</span>
+              <span class="executetime">2022-06-02 09:49:30</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink23</span>
+              <div class="test_steps" id="test_steps 首页头部商务合作链接检查--index23">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部商务合作链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部商务合作链接检查--index23">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000057">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部广告服务链接检查--index24</span>
+              <span class="executetime">2022-06-02 09:49:38</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink24</span>
+              <div class="test_steps" id="test_steps 首页头部广告服务链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部广告服务链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部广告服务链接检查--index24">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000058">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页头部产品销售合作链接检查--index24</span>
+              <span class="executetime">2022-06-02 09:49:46</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页头部导航功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页头部产品销售合作链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页头部产品销售合作链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页头部产品销售合作链接检查--index24">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页广告位功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页广告位功能检查.py</span>
+          </div>
+          <div class="case pass" id="case_00000059">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页左侧广告位链接检查--index25</span>
+              <span class="executetime">2022-06-02 09:49:54</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink25</span>
+              <div class="test_steps" id="test_steps 首页左侧广告位链接检查--index25">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页左侧广告位是否存在</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页左侧广告位链接检查--index25">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000060">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页右侧广告位链接检查--index26</span>
+              <span class="executetime">2022-06-02 09:49:58</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页广告位功能检查.py::CheckLink26</span>
+              <div class="test_steps" id="test_steps 首页右侧广告位链接检查--index26">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页右侧广告位是否存在</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页右侧广告位链接检查--index26">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页底部导航功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\首页\首页底部导航功能检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页底部导航功能检查.py</span>
+              <span class="executetime">2022-06-02 09:50:02</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="case pass" id="case_00000061">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部超级订阅链接检查--index08</span>
+              <span class="executetime">2022-06-02 09:50:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink08</span>
+              <div class="test_steps" id="test_steps 首页底部超级订阅链接检查--index08">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部超级订阅链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部超级订阅链接检查--index08">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000062">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部大会员链接检查--index09</span>
+              <span class="executetime">2022-06-02 09:50:10</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink09</span>
+              <div class="test_steps" id="test_steps 首页底部大会员链接检查--index09">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部大会员链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部大会员链接检查--index09">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000063">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部自助导出链接检查--index10</span>
+              <span class="executetime">2022-06-02 09:50:18</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink10</span>
+              <div class="test_steps" id="test_steps 首页底部自助导出链接检查--index10">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部自助导出链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部自助导出链接检查--index10">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000064">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部定制服务链接检查--index11</span>
+              <span class="executetime">2022-06-02 09:50:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink11</span>
+              <div class="test_steps" id="test_steps 首页底部定制服务链接检查--index11">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部定制服务链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部定制服务链接检查--index11">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000065">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部中标必听课链接检查--index12</span>
+              <span class="executetime">2022-06-02 09:50:35</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink12</span>
+              <div class="test_steps" id="test_steps 首页底部中标必听课链接检查--index12">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部中标比听课链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部中标必听课链接检查--index12">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000066">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部剑鱼文库链接检查--index13</span>
+              <span class="executetime">2022-06-02 09:50:43</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink13</span>
+              <div class="test_steps" id="test_steps 首页底部剑鱼文库链接检查--index13">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部剑鱼文库链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部剑鱼文库链接检查--index13">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000067">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部中标预测链接检查--index14</span>
+              <span class="executetime">2022-06-02 09:50:51</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink14</span>
+              <div class="test_steps" id="test_steps 首页底部中标预测链接检查--index14">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部中标预测链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部中标预测链接检查--index14">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000068">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部潜在客户挖掘链接检查--index15</span>
+              <span class="executetime">2022-06-02 09:50:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink15</span>
+              <div class="test_steps" id="test_steps 首页底部潜在客户挖掘链接检查--index15">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部潜在客户挖掘链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部潜在客户挖掘链接检查--index15">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000069">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部潜在合作伙伴挖掘链接检查--index16</span>
+              <span class="executetime">2022-06-02 09:51:08</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink16</span>
+              <div class="test_steps" id="test_steps 首页底部潜在合作伙伴挖掘链接检查--index16">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部潜在合作伙伴挖掘链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部潜在合作伙伴挖掘链接检查--index16">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000070">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部招标决策分析链接检查--index17</span>
+              <span class="executetime">2022-06-02 09:51:16</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink17</span>
+              <div class="test_steps" id="test_steps 首页底部招标决策分析链接检查--index17">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部招标决策分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部招标决策分析链接检查--index17">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000071">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部竞争对手分析链接检查--index18</span>
+              <span class="executetime">2022-06-02 09:51:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink18</span>
+              <div class="test_steps" id="test_steps 首页底部竞争对手分析链接检查--index18">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部竞争对手分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部竞争对手分析链接检查--index18">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000072">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部市场分析链接检查--index19</span>
+              <span class="executetime">2022-06-02 09:51:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink19</span>
+              <div class="test_steps" id="test_steps 首页底部市场分析链接检查--index19">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部市场分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部市场分析链接检查--index19">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000073">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部客户分析链接检查--index20</span>
+              <span class="executetime">2022-06-02 09:51:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink20</span>
+              <div class="test_steps" id="test_steps 首页底部客户分析链接检查--index20">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部客户分析链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部客户分析链接检查--index20">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000074">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部了解剑鱼标讯链接检查--index21</span>
+              <span class="executetime">2022-06-02 09:51:49</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink21</span>
+              <div class="test_steps" id="test_steps 首页底部了解剑鱼标讯链接检查--index21">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部了解剑鱼标讯链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部了解剑鱼标讯链接检查--index21">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000075">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部剑鱼标讯博客链接检查--index22</span>
+              <span class="executetime">2022-06-02 09:51:57</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink22</span>
+              <div class="test_steps" id="test_steps 首页底部剑鱼标讯博客链接检查--index22">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部了解剑鱼标讯链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部剑鱼标讯博客链接检查--index22">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000076">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部商务合作链接检查--index23</span>
+              <span class="executetime">2022-06-02 09:52:06</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink23</span>
+              <div class="test_steps" id="test_steps 首页底部商务合作链接检查--index23">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部商务合作链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部商务合作链接检查--index23">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000077">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页底部广告服务链接检查--index24</span>
+              <span class="executetime">2022-06-02 09:52:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页底部导航功能检查.py::CheckLink24</span>
+              <div class="test_steps" id="test_steps 首页底部广告服务链接检查--index24">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页底部广告服务链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页底部广告服务链接检查--index24">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py</span>
+              <span class="executetime">2022-06-02 09:52:22</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="case pass" id="case_00000078">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页按主要地区搜索:北京,上海,天津,重庆,香港,澳门,台湾链接检查--index27</span>
+              <span class="executetime">2022-06-02 09:52:22</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py::CheckLink27</span>
+              <div class="test_steps" id="test_steps 首页按主要地区搜索:北京,上海,天津,重庆,香港,澳门,台湾链接检查--index27">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:北京搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:上海搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:天津搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:重庆搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:香港搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按主要地区:澳门搜索,链接能打开,数据能正常展示</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页按主要地区搜索:北京,上海,天津,重庆,香港,澳门,台湾链接检查--index27">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000079">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页按其他地区搜索链接检查--index28</span>
+              <span class="executetime">2022-06-02 09:53:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py::CheckLink28</span>
+              <div class="test_steps" id="test_steps 首页按其他地区搜索链接检查--index28">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:河北搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:山西搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:内蒙古搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:辽宁搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:吉林搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:黑龙江搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:江苏搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:浙江搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:安徽搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:福建搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:江西搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:山东搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:河南搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:湖北搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:湖南搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:广东搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:广西搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:四川搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:贵州搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:云南搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:海南搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:陕西搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:甘肃搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:宁夏搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:青海搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:新疆搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按地区:西藏搜索,链接能打开,数据能正常展示</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页按其他地区搜索链接检查--index28">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000080">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页信息类型链接检查--index29</span>
+              <span class="executetime">2022-06-02 09:56:04</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py::CheckLink29</span>
+              <div class="test_steps" id="test_steps 首页信息类型链接检查--index29">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按信息类型:招标公告搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按信息类型:招标结果搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按信息类型:招标信用信息搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按信息类型:招标预告搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按信息类型:拟建项目搜索,链接能打开,数据能正常展示</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页信息类型链接检查--index29">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000081">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页按热门招标链接检查--index30</span>
+              <span class="executetime">2022-06-02 09:56:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页按地区,信息类型,热门招标模块检查.py::CheckLink30</span>
+              <div class="test_steps" id="test_steps 首页按热门招标链接检查--index30">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/YALUJI.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1267264991&quot;&gt;压路机&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/DIANQISHEBEI2.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;755563427&quot;&gt;电气设备&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/DIANCAINUAN.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;23905945&quot;&gt;电采暖&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/DIANZIWEILAN.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1445022313&quot;&gt;电子围栏&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/XITONGRUANJIAN.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1983094226&quot;&gt;系统软件&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/BANGONGZHUO.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;2772775681&quot;&gt;办公桌&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/JIXIEZHIZAO.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;3014296601&quot;&gt;机械制造&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/DAOLUGONGCHENG.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1838884775&quot;&gt;道路工程&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/BCHAO.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1460322816&quot;&gt;B超&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/ZHIHUILUDENG.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;2731317444&quot;&gt;智慧路灯&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/HUODONGCEHUA.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;3101382774&quot;&gt;活动策划&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页按热门招标链接:&lt;a href=&quot;/list/keywords/MIAOMU.html&quot; target=&quot;_blank&quot; data-cl-id=&quot;1827426394&quot;&gt;苗木&lt;/a&gt;搜索,链接能打开,数据能正常展示</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页按热门招标链接检查--index30">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新公告功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新公告功能检查.py</span>
+          </div>
+          <div class="case pass" id="case_00000082">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页最新公告信息链接检查--index08</span>
+              <span class="executetime">2022-06-02 09:57:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新公告功能检查.py::CheckNewest07</span>
+              <div class="test_steps" id="test_steps 首页最新公告信息链接检查--index08">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新公告下信息总数是否为24条</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新公告信息能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页最新公告信息链接检查--index08">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页最新资讯功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页最新资讯功能检查.py</span>
+          </div>
+          <div class="case pass" id="case_00000083">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页最新资讯链接检查--index06</span>
+              <span class="executetime">2022-06-02 09:58:10</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页最新资讯功能检查.py::CheckLink06</span>
+              <div class="test_steps" id="test_steps 首页最新资讯链接检查--index06">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新资讯链接能否打开</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新资讯链接能否打开</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新资讯链接能否打开</span>
+                </div>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页最新资讯链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页最新资讯链接检查--index06">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\2普通会员登录\首页\首页金刚区功能检查.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\2普通会员登录\首页\首页金刚区功能检查.py</span>
+          </div>
+          <div class="case pass" id="case_00000084">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页金刚区大会员链接检查--index01</span>
+              <span class="executetime">2022-06-02 09:58:27</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink01</span>
+              <div class="test_steps" id="test_steps 首页金刚区大会员链接检查--index01">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页金刚区大会员链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页金刚区大会员链接检查--index01">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000085">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页金刚区超级订阅链接检查--index02</span>
+              <span class="executetime">2022-06-02 09:58:36</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink02</span>
+              <div class="test_steps" id="test_steps 首页金刚区超级订阅链接检查--index02">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页金刚区超级订阅链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页金刚区超级订阅链接检查--index02">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000086">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页金刚区结构化数据链接检查--index03</span>
+              <span class="executetime">2022-06-02 09:58:44</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink03</span>
+              <div class="test_steps" id="test_steps 首页金刚区结构化数据链接检查--index03">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页金刚区结构化数据链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页金刚区结构化数据链接检查--index03">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000087">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页金刚区中标必听课链接检查--index04</span>
+              <span class="executetime">2022-06-02 09:58:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink04</span>
+              <div class="test_steps" id="test_steps 首页金刚区中标必听课链接检查--index04">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页金刚区中标必听课链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页金刚区中标必听课链接检查--index04">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000088">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">首页金刚区数据流量包链接检查--index05</span>
+              <span class="executetime">2022-06-02 09:59:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\2普通会员登录\首页\首页金刚区功能检查.py::CheckLink05</span>
+              <div class="test_steps" id="test_steps 首页金刚区数据流量包链接检查--index05">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检查首页金刚区数据流量包链接能否打开</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 首页金刚区数据流量包链接检查--index05">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\2普通会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\2普通会员登录\</span>
+              <span class="executetime">2022-06-02 09:59:08</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 09:59:22</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 757 - 0
log/log_20220602_100621.html

@@ -0,0 +1,757 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:06:21</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:07:14</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>53.325 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>2</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:06:21</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:06:28</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 10:06:38</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:06:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 10:06:53</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 10:06:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_subscription()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 42, in click_subscription
+    default_url = self.click_function(self.common_subscription_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 56, in close_bigwindow
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    url= bm.click_data()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 46, in click_data
+    default_url = self.click_function(self.common_data_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 31, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 36, in teststeps
+    url= bm.click_record()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 50, in click_record
+    default_url = self.click_function(self.common_record_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 39, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 45, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 61, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 87, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 79, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:07:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 757 - 0
log/log_20220602_101021.html

@@ -0,0 +1,757 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:10:21</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:11:13</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>52.055 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>2</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">4</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">4</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:10:21</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:10:27</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 10:10:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:10:46</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 10:10:52</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 10:10:58</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 20, in teststeps
+    url= bm.click_subscription()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 42, in click_subscription
+    default_url = self.click_function(self.common_subscription_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 26, in click_function
+    bp.click(loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 23, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 56, in close_bigwindow
+    bp.switch_to_firstwindow()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 204, in switch_to_firstwindow
+    wd.switch_to_window(wd.window_handles[0])
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 724, in window_handles
+    return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 28, in teststeps
+    url= bm.click_data()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 46, in click_data
+    default_url = self.click_function(self.common_data_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 31, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 36, in teststeps
+    url= bm.click_record()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 50, in click_record
+    default_url = self.click_function(self.common_record_loc)
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 25, in click_function
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 39, in teardown
+    bm.close_bigwindow()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 55, in close_bigwindow
+    bp.close_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 200, in close_window
+    wd.close()  # 关闭当前
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 688, in close
+    self.execute(Command.CLOSE)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 45, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 61, in add_common_fuction
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 87, in go_to_forecast
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 79, in go_to_monitor
+    mainwidow = bp.mark_main_window()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 173, in mark_main_window
+    mainWindow = wd.current_window_handle
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 711, in current_window_handle
+    return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: invalid session id
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:11:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 665 - 0
log/log_20220602_101409.html

@@ -0,0 +1,665 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:14:09</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:15:18</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>68.146 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>6</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">2</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:14:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:14:18</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 10:14:28</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:14:36</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 10:14:44</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 10:14:50</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 10:14:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 10:15:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据导出记录,是否跳转到数据导出记录页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:15:09</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 45, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 63, in add_common_fuction
+    bp.click(self.arrow_right)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:15:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 539). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_forecast()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 88, in go_to_forecast
+    bp.click(self.bid_forecast)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 539). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 10:15:12</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 504). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 80, in go_to_monitor
+    bp.click(self.enterprise_monitoring)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-3acefbe8=&quot;&quot; class=&quot;router-name&quot;&gt;...&lt;/span&gt; is not clickable at point (244, 504). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:15:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:15:14</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 485 - 0
log/log_20220602_101703.html

@@ -0,0 +1,485 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:17:03</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:17:39</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>35.656 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:17:03</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:17:14</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:17:24</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:17:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 45, in teststeps
+    bm.add_common_fuction()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 63, in add_common_fuction
+    bp.click(self.arrow_right)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;i data-v-12e0c5a8=&quot;&quot; class=&quot;el-icon-arrow-right&quot;&gt;&lt;/i&gt; is not clickable at point (1341, 430). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (1048, 658). Other element would receive the click: &lt;div data-v-d2153770=&quot;&quot; class=&quot;selector-card-footer&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:17:36</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 13, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div data-v-b351ac70=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:17:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 453 - 0
log/log_20220602_102454.html

@@ -0,0 +1,453 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:24:54</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:25:41</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.278 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:24:54</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:25:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:25:10</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case fail" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:25:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:25:18</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 15, in suite_teardown
+    lp.exit_web()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 56, in exit_web
+    bp.click(self.exit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:25:38</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 452 - 0
log/log_20220602_102813.html

@@ -0,0 +1,452 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:28:13</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:28:54</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>41.321 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:28:13</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:28:20</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:28:30</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case fail" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:28:37</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable fail" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+                <div class="info error-info">case teardown fail | Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (924, 658). Other element would receive the click: &lt;img data-v-b351ac70=&quot;&quot; src=&quot;/commonFunctions/pc_collection.png&quot; alt=&quot;常用功能&quot; class=&quot;item-img&quot;&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 50, in teardown
+    bm.unadd_common_function()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 67, in unadd_common_function
+    bp.click(self.common_add)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span data-v-b351ac70=&quot;&quot; class=&quot;icon-add&quot;&gt;&lt;/span&gt; is not clickable at point (924, 658). Other element would receive the click: &lt;img data-v-b351ac70=&quot;&quot; src=&quot;/commonFunctions/pc_collection.png&quot; alt=&quot;常用功能&quot; class=&quot;item-img&quot;&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:28:39</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:28:52</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 430 - 0
log/log_20220602_103831.html

@@ -0,0 +1,430 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:38:31</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:39:12</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>40.717 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:38:31</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:38:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:38:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case fail" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:38:54</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:38:55</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:39:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 422 - 0
log/log_20220602_103953.html

@@ -0,0 +1,422 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:39:53</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:42:07</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>134.700 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:39:53</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:39:59</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:40:09</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:40:16</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:41:51</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:42:05</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 445 - 0
log/log_20220602_104228.html

@@ -0,0 +1,445 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:42:28</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:43:10</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>41.868 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:42:28</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:42:35</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 10:42:45</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:42:53</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;span&gt;...&lt;/span&gt; is not clickable at point (21, 9). Other element would receive the click: &lt;section class=&quot;public-nav&quot; id=&quot;public-nav&quot; data-theme=&quot;light&quot;&gt;...&lt;/section&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\__st__.py&quot;, line 5, in suite_setup
+    rb.click_bigmember()
+  File &quot;E:\project\jianyu_auto\pageobject\right_navigation_page.py&quot;, line 11, in click_bigmember
+    bp.click(self.bigmember1_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;span&gt;...&lt;/span&gt; is not clickable at point (21, 9). Other element would receive the click: &lt;section class=&quot;public-nav&quot; id=&quot;public-nav&quot; data-theme=&quot;light&quot;&gt;...&lt;/section&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:42:54</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:43:07</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 628 - 0
log/log_20220602_104316.html

@@ -0,0 +1,628 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:43:16</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:45:13</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>117.472 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>7</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>5</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:43:16</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:43:32</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 10:43:42</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:43:51</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 10:43:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 10:44:05</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 10:44:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 10:44:17</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据导出记录,是否跳转到数据导出记录页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 10:44:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:44:25</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 10:44:31</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py&quot;, line 8, in teststeps
+    name,num=fd.return_forecast_result()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_bidforecast_detail_page.py&quot;, line 14, in return_forecast_result
+    purchasing_unit=bp.obtain_text(self.purchasing_unit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 131, in obtain_text
+    return self.locator_element(loc).text
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 10:44:47</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//li[@class=&quot;el-menu-item-group&quot;]//span[text()=&quot;企业情报监控&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\__st__.py&quot;, line 5, in suite_setup
+    bm.go_to_monitor()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_main_page.py&quot;, line 80, in go_to_monitor
+    bp.click(self.enterprise_monitoring)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//li[@class=&quot;el-menu-item-group&quot;]//span[text()=&quot;企业情报监控&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:44:57</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:45:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 451 - 0
log/log_20220602_104742.html

@@ -0,0 +1,451 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:47:42</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:48:44</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>62.068 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:47:42</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:47:49</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:47:59</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:48:06</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 10:48:12</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py&quot;, line 8, in teststeps
+    name,num=fd.return_forecast_result()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_bidforecast_detail_page.py&quot;, line 14, in return_forecast_result
+    purchasing_unit=bp.obtain_text(self.purchasing_unit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 131, in obtain_text
+    return self.locator_element(loc).text
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:48:28</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:48:42</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 474 - 0
log/log_20220602_105031.html

@@ -0,0 +1,474 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:50:31</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:51:27</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>56.110 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:50:31</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:50:38</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:50:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:50:54</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case abort" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 10:51:00</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py&quot;, line 8, in teststeps
+    name,num=fd.return_forecast_result()
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_bidforecast_detail_page.py&quot;, line 14, in return_forecast_result
+    purchasing_unit=bp.obtain_text(self.purchasing_unit_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 131, in obtain_text
+    return self.locator_element(loc).text
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//span[@class=&quot;bid_unitname&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:51:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: move target out of bounds
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\__st__.py&quot;, line 15, in suite_teardown
+    lp.exit()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 60, in exit
+    bp.mouse_over(self.login_Loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 213, in mouse_over
+    ac.move_to_element(self.locator_element(loc)).perform()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\common\action_chains.py&quot;, line 80, in perform
+    self.w3c_actions.perform()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\common\actions\action_builder.py&quot;, line 76, in perform
+    self.driver.execute(Command.W3C_ACTIONS, enc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: move target out of bounds
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:51:25</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 433 - 0
log/log_20220602_105327.html

@@ -0,0 +1,433 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:53:27</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:54:28</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>60.960 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:53:27</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:53:33</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:53:43</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:53:49</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 10:53:56</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验中标预测结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:54:12</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:54:26</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 433 - 0
log/log_20220602_105531.html

@@ -0,0 +1,433 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 10:55:31</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 10:56:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>61.323 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:55:31</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:55:37</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 10:55:47</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 10:55:53</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 10:55:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验中标预测结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 10:56:16</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 10:56:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 441 - 0
log/log_20220602_110402.html

@@ -0,0 +1,441 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:04:02</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:05:08</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>65.618 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:04:02</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:04:10</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 11:04:20</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:04:27</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 11:04:33</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验中标预测结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:04:49</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:04:52</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:05:06</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 721 - 0
log/log_20220602_110522.html

@@ -0,0 +1,721 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:05:22</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:07:43</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>141.273 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>12</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>10</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:05:22</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:05:28</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 11:05:38</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 11:05:46</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 11:05:53</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 11:05:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 11:06:05</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 11:06:11</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据导出记录,是否跳转到数据导出记录页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 11:06:18</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:06:18</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 11:06:25</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验中标预测结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:06:41</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:06:44</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--默认分组</span>
+              <span class="executetime">2022-06-02 11:06:51</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--默认分组">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--默认分组">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--竞争对手</span>
+              <span class="executetime">2022-06-02 11:06:53</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor01</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--竞争对手">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--竞争对手">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--合作伙伴</span>
+              <span class="executetime">2022-06-02 11:07:03</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor02</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--合作伙伴">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--合作伙伴">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case abort" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 ABORT</span>
+              <span class="casename">企业情报页面企业名称搜索</span>
+              <span class="executetime">2022-06-02 11:07:14</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor03</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索">
+                <span class="label">测试步骤</span>
+                <div class="info error-info">Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@class=&quot;list_name ent_li_name&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py&quot;, line 33, in teststeps
+    actural=cbm.obtain_title('咨询')
+  File &quot;E:\project\jianyu_auto\pageobject\bigmember_monitor_page.py&quot;, line 31, in obtain_title
+    title=bp.obtain_text(self.title_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 131, in obtain_text
+    return self.locator_element(loc).text
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 55, in locator_element
+    return wd.find_element(*loc)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 978, in find_element
+    'value': value})['value']
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {&quot;method&quot;:&quot;xpath&quot;,&quot;selector&quot;:&quot;//div[@class=&quot;list_name ent_li_name&quot;]&quot;}
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面企业名称搜索-无结果</span>
+              <span class="executetime">2022-06-02 11:07:24</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor04</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索-无结果">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面企业名称搜索无结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:07:24</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:07:27</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:07:41</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 449 - 0
log/log_20220602_111145.html

@@ -0,0 +1,449 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:11:45</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:12:32</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>47.287 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:11:45</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:11:50</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 11:12:00</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:12:07</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py</span>
+          </div>
+          <div class="case fail" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">企业情报页面企业名称搜索</span>
+              <span class="executetime">2022-06-02 11:12:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor03</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>验证企业情报页面企业名称搜索是否正确</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py&quot;, line 34, in teststeps
+    CHECK_POINT('验证企业情报页面企业名称搜索是否正确',expected in actural)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:12:13</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:12:16</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:12:30</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 441 - 0
log/log_20220602_111446.html

@@ -0,0 +1,441 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:14:46</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:15:34</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>48.562 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>1</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:14:46</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:14:52</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 11:15:02</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:15:09</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面企业名称搜索</span>
+              <span class="executetime">2022-06-02 11:15:15</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor03</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面企业名称搜索是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:15:15</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:15:18</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:15:32</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 703 - 0
log/log_20220602_111609.html

@@ -0,0 +1,703 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:16:09</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:18:21</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>131.809 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>12</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>11</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:16:09</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:16:16</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员使用页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员使用页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员用户登录</span>
+              <span class="executetime">2022-06-02 11:16:26</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员使用页面.py::BigMember</span>
+              <div class="case_setup setup case_st_lable" id="case_setup setup 大会员用户登录">
+                <span class="label">用例初始化</span>
+              </div>
+              <div class="test_steps" id="test_steps 大会员用户登录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证大会员用户登录后,是否是立即使用按钮</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\</span>
+              <span class="executetime">2022-06-02 11:16:34</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py</span>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能企业搜索</span>
+              <span class="executetime">2022-06-02 11:16:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain02</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能企业搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击企业搜索,是否跳转到企业搜索页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能企业搜索">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能订阅管理</span>
+              <span class="executetime">2022-06-02 11:16:47</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain03</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能订阅管理">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击订阅管理,是否跳转到订阅管理页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能订阅管理">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000004">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据自助导出</span>
+              <span class="executetime">2022-06-02 11:16:53</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain04</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据自助导出,是否跳转到数据自助导出页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据自助导出">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000005">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">大会员工作台页面--常用功能数据导出记录</span>
+              <span class="executetime">2022-06-02 11:16:59</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain05</span>
+              <div class="test_steps" id="test_steps 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证点击数据导出记录,是否跳转到数据导出记录页面</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 大会员工作台页面--常用功能数据导出记录">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case fail" id="case_00000006">
+            <div class="folder_header">
+              <span class="label caselabel">用例 FAIL</span>
+              <span class="casename">添加常用功能</span>
+              <span class="executetime">2022-06-02 11:17:06</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py::BigMain06</span>
+              <div class="test_steps" id="test_steps 添加常用功能">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_fail">
+                  <span class="tag">检查点 FAIL</span>
+                  <span>检验添加常用功能是否添加成功</span>
+                </div>
+                <div class="info error-info"> 
+Traceback:
+  File &quot;cases\3大会员登录\大会员工作台\大会员工作台--常用功能.py&quot;, line 48, in teststeps
+    CHECK_POINT('检验添加常用功能是否添加成功',actural == expected )
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\hytest\common.py&quot;, line 45, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+</div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 添加常用功能">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\中标企业预测\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:17:07</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000007">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">中标企业预测页面</span>
+              <span class="executetime">2022-06-02 11:17:13</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\中标企业预测\中标企业预测页面.py::BigForecast</span>
+              <div class="test_steps" id="test_steps 中标企业预测页面">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>检验中标预测结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\中标企业预测\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\中标企业预测\</span>
+              <span class="executetime">2022-06-02 11:17:29</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\3大会员登录\大会员工作台\企业情报监控\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:17:32</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py</span>
+          </div>
+          <div class="case pass" id="case_00000008">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--默认分组</span>
+              <span class="executetime">2022-06-02 11:17:39</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--默认分组">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--默认分组">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000009">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--竞争对手</span>
+              <span class="executetime">2022-06-02 11:17:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor01</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--竞争对手">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--竞争对手">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000010">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面标签搜索--合作伙伴</span>
+              <span class="executetime">2022-06-02 11:17:51</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor02</span>
+              <div class="test_steps" id="test_steps 企业情报页面标签搜索--合作伙伴">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面标签检索结果是否正确</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 企业情报页面标签搜索--合作伙伴">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000011">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面企业名称搜索</span>
+              <span class="executetime">2022-06-02 11:18:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor03</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面企业名称搜索是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000012">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">企业情报页面企业名称搜索-无结果</span>
+              <span class="executetime">2022-06-02 11:18:02</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\3大会员登录\大会员工作台\企业情报监控\企业情报监控页面.py::BigMonitor04</span>
+              <div class="test_steps" id="test_steps 企业情报页面企业名称搜索-无结果">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证企业情报页面企业名称搜索无结果是否正确</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\大会员工作台\企业情报监控\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\大会员工作台\企业情报监控\</span>
+              <span class="executetime">2022-06-02 11:18:02</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\3大会员登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\3大会员登录\</span>
+              <span class="executetime">2022-06-02 11:18:05</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:18:19</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 396 - 0
log/log_20220602_112000.html

@@ -0,0 +1,396 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:20:00</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:20:19</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>19.372 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:20:00</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:20:07</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+              <div class="info error-info">suite setup fail | Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 8, in suite_setup
+    lp.super_login()
+  File &quot;E:\project\jianyu_auto\pageobject\login_page.py&quot;, line 36, in super_login
+    bp.send_keys(self.phone_loc, phone)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 96, in send_keys
+    self.locator_element(loc).send_keys(value)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 479, in send_keys
+    'value': keys_to_typing(value)})
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:20:17</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 442 - 0
log/log_20220602_112042.html

@@ -0,0 +1,442 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:20:42</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:21:07</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>25.095 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:20:42</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:20:47</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\搜索\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\搜索\</span>
+              <span class="executetime">2022-06-02 11:21:02</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;input class=&quot;btn&quot; type=&quot;button&quot; onclick=&quot;zbSeatch('zbIndex')&quot;&gt; is not clickable at point (1046, 213). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\搜索\__st__.py&quot;, line 5, in suite_setup
+    sp.go_to_search()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 74, in go_to_search
+    bp.click(self.search_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;input class=&quot;btn&quot; type=&quot;button&quot; onclick=&quot;zbSeatch('zbIndex')&quot;&gt; is not clickable at point (1046, 213). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:21:03</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot; data-cl-id=&quot;866346189&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot; data-cl-id=&quot;866346189&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:21:04</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 442 - 0
log/log_20220602_112127.html

@@ -0,0 +1,442 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:21:27</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:21:51</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>24.417 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>0</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="color:red">1</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:21:27</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:21:32</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\搜索\</span>
+          </div>
+          <div class="suite_setup setup fail" id="suite_setup setup cases\4超级订阅用户登录\搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\搜索\</span>
+              <span class="executetime">2022-06-02 11:21:47</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite setup fail | Message: element click intercepted: Element &lt;input class=&quot;btn&quot; type=&quot;button&quot; onclick=&quot;zbSeatch('zbIndex')&quot;&gt; is not clickable at point (1046, 213). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\搜索\__st__.py&quot;, line 5, in suite_setup
+    sp.go_to_search()
+  File &quot;E:\project\jianyu_auto\pageobject\search_page.py&quot;, line 74, in go_to_search
+    bp.click(self.search_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;input class=&quot;btn&quot; type=&quot;button&quot; onclick=&quot;zbSeatch('zbIndex')&quot;&gt; is not clickable at point (1046, 213). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown fail" id="suite_teardown teardown cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:21:48</span>
+            </div>
+            <div class="folder_body">
+              <div class="info error-info">suite teardown fail | Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot; data-cl-id=&quot;866346189&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File &quot;cases\4超级订阅用户登录\__st__.py&quot;, line 14, in suite_teardown
+    ip.go_to_index()
+  File &quot;E:\project\jianyu_auto\pageobject\index_page.py&quot;, line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File &quot;E:\project\jianyu_auto\base\base_apge.py&quot;, line 100, in click
+    self.locator_element(loc).click()
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 633, in _execute
+    return self._parent.execute(command, params)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 321, in execute
+    self.error_handler.check_response(response)
+  File &quot;c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;a class=&quot;logo&quot; href=&quot;/&quot; data-cl-id=&quot;866346189&quot;&gt;...&lt;/a&gt; is not clickable at point (233, 31). Other element would receive the click: &lt;div class=&quot;modal fade bidLogin in&quot; id=&quot;bidLogin&quot; tabindex=&quot;-1&quot; role=&quot;dialog&quot; aria-labelledby=&quot;bidLogin&quot; aria-hidden=&quot;false&quot; style=&quot;display: block; padding-right: 5px;&quot;&gt;...&lt;/div&gt;
+  (Session info: chrome=88.0.4324.190)
+
+</div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:21:49</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="block">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 470 - 0
log/log_20220602_112504.html

@@ -0,0 +1,470 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>测试报告</title>
+    <meta charset="UTF-8">
+    <style>body {    
+    font-family: consolas, Verdana, sans-serif;
+    font-size: .92em;
+    color: #696e71;
+}
+
+.main_section {   
+    width: 90%;
+    margin: 0 auto;
+}
+
+#float_menu{    
+    position:fixed;
+    top:0;
+    right:0;
+    text-align: center;
+}
+
+#float_menu .menu-item {       
+    cursor: pointer;
+    padding: .5em;
+    margin: .5em 0;
+    color: #c08580;
+    background-color: #f8f0ef;
+    font-size: 1.2em;
+}
+
+table.result_stats{
+    border-collapse: collapse;
+    border: 1px solid #f0e0e5;
+    width: 35em;
+    text-align: center;
+    font-size: 1.0em;
+}
+    
+table.result_stats td{
+    border: 1px solid #f0e0e5;
+    padding: .3em;
+}
+
+.h3_button {
+    margin: 1.5em;
+    cursor: pointer;
+    color: #03a9f4;
+}
+
+
+.info
+{
+    white-space:pre-wrap;
+    padding: .6em;
+}
+
+
+.error-info
+{
+    color: #a64747
+}
+
+.suite_dir {
+    margin: 1em .2em;
+    padding: .3em;
+    /* background-color: #dfeff6; */
+    border: 1px solid #bcd8e4;
+}
+.suite_file {
+    margin: 1em .2em;
+    padding: .3em;
+    border: 1px solid #bcd8e4;
+}
+
+
+.case {
+    margin: 1em .2em;
+    /* padding: .3em; */
+    border: 1px solid #e7d4d4;
+}
+
+.case_class_path{
+    margin: 0em 1em; 
+}
+
+
+.folder_header { 
+    padding: .2em .7em;
+    background-color: #fffaf9;
+    cursor: pointer;
+}
+
+
+.setup{
+    margin: .2em;
+    /* padding: .3em; */
+    /* border: 1px solid #e7d4d4; */
+}
+.teardown{
+    margin: .2em;
+    /* padding: .3em;*/
+    /* border: 1px solid #e7d4d4; */
+}
+.test_steps{
+    margin: .2em;
+    padding: .3em;
+    /* border: 1px solid #e7d4d4; */
+}
+
+
+.label {
+    display: inline-block;
+    padding: .1em .5em;
+    font-size: .88em;
+    letter-spacing: 1px;
+    white-space: nowrap;
+    color: #0d6ebc;
+    border-radius: .2em;
+    min-width: 5em;    
+    margin-right: 2em;
+    font-family: consolas;
+}
+
+/* .suite_setup .label{
+    color: #219e26 ;
+}
+.suite_teardown .label{
+    color: #219e26;
+} */
+
+
+/* .case.pass   .casename{
+    color: #329132 ;
+} */
+.case.pass   .caselabel{
+    color: white;
+    background-color: #3b9e3f;
+}
+/* .case.fail   .casename{
+    color: #a64747;
+} */
+.case.fail   .caselabel{
+    color: white;
+    background-color: #a64747;
+}
+/* .case.abort   .casename{
+    color: #953ab7;
+} */
+.case.abort   .caselabel{
+    color: white;
+    background-color: #9c27b0;
+}
+
+
+
+.case_step  {
+    margin: .8em;
+}
+.checkpoint_pass {
+    margin: .8em;
+}
+.checkpoint_fail {
+    margin: .8em;
+}
+
+.case_step  .tag{
+    color: #2196f3;;
+    margin: .3em 1em .3em 0;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.checkpoint_pass .tag{
+    color: #009806;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+.checkpoint_fail .tag{
+    color: #9c2020;
+    margin:.3em 1em .3em .5em;
+    padding: .1em .3em;
+    font-size: .92em;
+}
+
+.screenshot {
+    border: 1px solid #86c2dd;
+}
+
+.executetime {
+    float: right;
+}</style>
+    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
+var ERROR_INFOS = [];  // 错误信息列表
+var current_error_idx = -1;
+
+// 页面加载后执行的函数
+window.addEventListener("load", function(){
+    // 所有 .folder_header 添加点击事件处理
+    let folderHeaderEles = document.querySelectorAll(".folder_header");
+    folderHeaderEles.forEach(function(ele) {
+        ele.addEventListener("click", function(event) {
+        let fb = event.target.closest('.folder_header').nextElementSibling;
+        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
+        });
+    });
+
+    // 找到所有的错误信息对象
+    ERROR_INFOS = document.querySelectorAll(".error-info");
+});
+
+
+
+function toggle_folder_all_cases(){
+    let eles = document.querySelectorAll(".folder_body");
+    
+    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
+    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
+
+    for (const ele of eles){
+        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
+    }
+    
+}
+
+
+
+function previous_error(){
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx -= 1; 
+    if (current_error_idx<0)
+        current_error_idx = 0
+
+    
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+
+    
+}
+
+
+function next_error(){
+    
+    // 查找错误必须是详细模式
+    if (FOLDER_ALL_CASES)
+        toggle_folder_all_cases()
+
+    current_error_idx += 1;
+    if (current_error_idx > ERROR_INFOS.length-1)
+        current_error_idx = ERROR_INFOS.length-1
+
+    let error = ERROR_INFOS[current_error_idx];
+
+    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
+    
+}</script>
+  </head>
+  <body>
+    <div class="main_section">
+      <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
+      <h3>统计结果</h3>
+      <table class="result_stats">
+        <tbody>
+          <tr>
+            <td>开始时间</td>
+            <td>20220602 11:25:04</td>
+          </tr>
+          <tr>
+            <td>结束时间</td>
+            <td>20220602 11:28:56</td>
+          </tr>
+          <tr>
+            <td>耗时</td>
+            <td>231.440 秒</td>
+          </tr>
+          <tr>
+            <td>用例数量</td>
+            <td>3</td>
+          </tr>
+          <tr>
+            <td>通过</td>
+            <td>3</td>
+          </tr>
+          <tr>
+            <td>失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>异常</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>套件清除失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例初始化失败</td>
+            <td style="">0</td>
+          </tr>
+          <tr>
+            <td>用例清除失败</td>
+            <td style="">0</td>
+          </tr>
+        </tbody>
+      </table>
+      <div style="margin-top:2em">
+        <h3 style="display:inline">执行日志</h3>
+      </div>
+      <div class="exec_log">
+        <div class="suite_dir" id="suite_dir cases\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:25:04</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">打开网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:25:11</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">登录网站</div>
+            </div>
+          </div>
+        </div>
+        <div class="suite_dir" id="suite_dir cases\4超级订阅用户登录\搜索\">
+          <div>
+            <span class="label">进入目录</span>
+            <span>cases\4超级订阅用户登录\搜索\</span>
+          </div>
+          <div class="suite_setup setup" id="suite_setup setup cases\4超级订阅用户登录\搜索\">
+            <div class="folder_header">
+              <span class="label">套件初始化</span>
+              <span>cases\4超级订阅用户登录\搜索\</span>
+              <span class="executetime">2022-06-02 11:25:26</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+        </div>
+        <div class="suite_file" id="suite_file cases\4超级订阅用户登录\搜索\用户输入时间搜索.py">
+          <div>
+            <span class="label">进入文件</span>
+            <span>cases\4超级订阅用户登录\搜索\用户输入时间搜索.py</span>
+          </div>
+          <div class="case pass" id="case_00000001">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">自定义时间搜索---test3022</span>
+              <span class="executetime">2022-06-02 11:25:40</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\4超级订阅用户登录\搜索\用户输入时间搜索.py::ConditionalSearch06</span>
+              <div class="test_steps" id="test_steps 自定义时间搜索---test3022">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的日期在搜索日期内,搜索日期:2021-02-03--2021-02-04</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 自定义时间搜索---test3022">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000002">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">自定义时间搜索---test3023</span>
+              <span class="executetime">2022-06-02 11:26:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\4超级订阅用户登录\搜索\用户输入时间搜索.py::ConditionalSearch06</span>
+              <div class="test_steps" id="test_steps 自定义时间搜索---test3023">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的日期在搜索日期内,搜索日期:大于2021-02-03</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 自定义时间搜索---test3023">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="case pass" id="case_00000003">
+            <div class="folder_header">
+              <span class="label caselabel">用例 PASS</span>
+              <span class="casename">自定义时间搜索---test3024</span>
+              <span class="executetime">2022-06-02 11:27:41</span>
+            </div>
+            <div class="folder_body">
+              <span class="case_class_path">cases\4超级订阅用户登录\搜索\用户输入时间搜索.py::ConditionalSearch06</span>
+              <div class="test_steps" id="test_steps 自定义时间搜索---test3024">
+                <span class="label">测试步骤</span>
+                <div class="checkpoint_pass">
+                  <span class="tag">检查点 PASS</span>
+                  <span>验证搜索结果的日期在搜索日期内,搜索日期:小于2021-02-04</span>
+                </div>
+              </div>
+              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 自定义时间搜索---test3024">
+                <span class="label">用例清除</span>
+              </div>
+            </div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\4超级订阅用户登录\搜索\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\4超级订阅用户登录\搜索\</span>
+              <span class="executetime">2022-06-02 11:28:42</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\4超级订阅用户登录\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\4超级订阅用户登录\</span>
+              <span class="executetime">2022-06-02 11:28:46</span>
+            </div>
+            <div class="folder_body"></div>
+          </div>
+          <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
+            <div class="folder_header">
+              <span class="label">套件清除</span>
+              <span>cases\</span>
+              <span class="executetime">2022-06-02 11:28:53</span>
+            </div>
+            <div class="folder_body">
+              <div class="info">suite_teardown</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div id="float_menu">
+        <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
+        <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">教程</div>
+        <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
+        <div class="error_jumper" display="none">
+          <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
+          <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 21 - 138
log/testresult.log

@@ -1,6 +1,6 @@
 
 
 
 
-  ========= 测试开始 : 20220415_110321 =========
+  ========= 测试开始 : 20220602_112504 =========
 
 
 
 
 
 
@@ -10,183 +10,66 @@
 打开网站
 打开网站
 
 
 
 
->>> cases\2普通会员登录\
+>>> cases\4超级订阅用户登录\
 
 
-[ suite setup ] cases\2普通会员登录\
+[ suite setup ] cases\4超级订阅用户登录\
 登录网站
 登录网站
 
 
 
 
->>> cases\2普通会员登录\搜索\招标搜索\
+>>> cases\4超级订阅用户登录\搜索\
 
 
-[ suite setup ] cases\2普通会员登录\搜索\招标搜索\
+[ suite setup ] cases\4超级订阅用户登录\搜索\
 
 
 
 
->>> cases\2普通会员登录\搜索\招标搜索\企业搜索.py
+>>> cases\4超级订阅用户登录\搜索\用户输入时间搜索.py
 
 
-* 企业搜索---bidwin_test2001  -  2022-04-15 11:03:57
+* 自定义时间搜索---test3022  -  2022-06-02 11:25:40
 
 
   [ case execution steps ]
   [ case execution steps ]
 
 
-** 检查点 **  搜索结果三级页正常打开,中标企业显示和搜索一致 ---->  通过
+** 检查点 **  验证搜索结果的日期在搜索日期内,搜索日期:2021-02-03--2021-02-04 ---->  通过
 
 
   PASS 
   PASS 
 
 
-[ case teardown ] 企业搜索---bidwin_test2001
+[ case teardown ] 自定义时间搜索---test3022
 
 
-
->>> cases\2普通会员登录\搜索\招标搜索\信息详情页.py
-
-* 信息详情页---detailpage_test01  -  2022-04-15 11:04:37
-
-  [ case execution steps ]
-
-** 检查点 **  验证三级页标题中含有搜索关键词 ---->  通过
-
-
-** 检查点 **  验证搜索结果中项目的区域,类型,行业,金额,日期是否正确 ---->  通过
-
-  PASS 
-
-[ case teardown ] 信息详情页---detailpage_test01
-
-* 信息详情页---detailpage_test03  -  2022-04-15 11:05:10
-
-  [ case execution steps ]
-
-** 检查点 **  验证项目公告功能 ---->  通过
-
-  PASS 
-
-[ case teardown ] 信息详情页---detailpage_test03
-
-
->>> cases\2普通会员登录\搜索\招标搜索\搜索框搜索.py
-
-* 招标搜索---search_test04  -  2022-04-15 11:05:44
-
-  [ case execution steps ]
-
-** 检查点 **  验证搜索结果中关键词是否正确 ---->  通过
-
-  PASS 
-
-[ case teardown ] 招标搜索---search_test04
-
-
->>> cases\2普通会员登录\搜索\招标搜索\拟建项目\
-
-[ suite setup ] cases\2普通会员登录\搜索\招标搜索\拟建项目\
-
-
->>> cases\2普通会员登录\搜索\招标搜索\拟建项目\拟建搜索.py
-
-* 拟建搜索---proposed_test  -  2022-04-15 11:06:12
-
-  [ case execution steps ]
-
-** 检查点 **  搜索列表关键词正确,石家庄 ---->  通过
-
-点击表格,生成图片,查看表格是否正常
-图 imgs/20220415110643313896.png
-  PASS 
-
-[ case teardown ] 拟建搜索---proposed_test
-
-
->>> cases\2普通会员登录\搜索\招标搜索\条件搜索\
-
-[ suite setup ] cases\2普通会员登录\搜索\招标搜索\条件搜索\
-
-
->>> cases\2普通会员登录\搜索\招标搜索\条件搜索\行业条件搜索.py
-
-* 行业搜索---conditional_test01  -  2022-04-15 11:06:57
-
-  [ case execution steps ]
-
-** 检查点 **  验证搜索的行业和搜索结果的行业相同 ---->  通过
-
-  PASS 
-
-[ case teardown ] 行业搜索---conditional_test01
-
-
->>> cases\2普通会员登录\搜索\招标搜索\条件搜索\其他条件搜索\其他条件搜索.py
-
-* 区域搜索---conditional_test02  -  2022-04-15 11:07:09
-
-  [ case execution steps ]
-
-** 检查点 **  验证搜索的区域和搜索结果的区域相同 ---->  通过
-
-  PASS 
-
-[ case teardown ] 区域搜索---conditional_test02
-
-* 信息类型搜索---conditional_test03  -  2022-04-15 11:07:22
-
-  [ case execution steps ]
-  PASS 
-
-[ case teardown ] 信息类型搜索---conditional_test03
-
-* 价格搜索---test3011  -  2022-04-15 11:07:34
-
-  [ case execution steps ]
-
-** 检查点 **  验证搜索结果的价格在搜索价格范围内 ---->  通过
-
-  PASS 
-
-[ case teardown ] 价格搜索---test3011
-
-* 价格搜索---test3015  -  2022-04-15 11:08:11
-
-  [ case execution steps ]
-
-** 检查点 **  验证搜索结果的价格在搜索价格范围内 ---->  通过
-
-  PASS 
-
-[ case teardown ] 价格搜索---test3015
-
-* 发布时间搜索---test3021  -  2022-04-15 11:08:48
+* 自定义时间搜索---test3023  -  2022-06-02 11:26:41
 
 
   [ case execution steps ]
   [ case execution steps ]
 
 
-** 检查点 **  验证搜索结果的日期在搜索日期内,搜索日期:最近七天 ---->  通过
+** 检查点 **  验证搜索结果的日期在搜索日期内,搜索日期:大于2021-02-03 ---->  通过
 
 
   PASS 
   PASS 
 
 
-[ case teardown ] 发布时间搜索---test3021
+[ case teardown ] 自定义时间搜索---test3023
 
 
-* 发布时间搜索---test30211  -  2022-04-15 11:09:00
+* 自定义时间搜索---test3024  -  2022-06-02 11:27:41
 
 
   [ case execution steps ]
   [ case execution steps ]
 
 
-** 检查点 **  验证搜索结果的日期在搜索日期内,搜索日期:最近1个月 ---->  通过
+** 检查点 **  验证搜索结果的日期在搜索日期内,搜索日期:小于2021-02-04 ---->  通过
 
 
   PASS 
   PASS 
 
 
-[ case teardown ] 发布时间搜索---test30211
+[ case teardown ] 自定义时间搜索---test3024
 
 
-[ suite teardown ] cases\2普通会员登录\搜索\招标搜索\条件搜索\
+[ suite teardown ] cases\4超级订阅用户登录\搜索\
 
 
-[ suite teardown ] cases\2普通会员登录\搜索\招标搜索\
+[ suite teardown ] cases\4超级订阅用户登录\
 
 
 [ suite teardown ] cases\
 [ suite teardown ] cases\
 suite_teardown
 suite_teardown
 
 
 
 
-  ========= 测试结束 : 20220415_110927 =========
+  ========= 测试结束 : 20220602_112856 =========
 
 
 
 
-  耗时    : 366.502
+  耗时    : 231.440 秒
 
 
 
 
-  用例数量 : 12
+  用例数量 : 3
 
 
-  通过 : 12
+  通过 : 3
 
 
   失败 : 0
   失败 : 0
 
 

+ 56 - 25
log/testresult.log.1

@@ -1,6 +1,6 @@
 
 
 
 
-  ========= 测试开始 : 20220415_110134 =========
+  ========= 测试开始 : 20220602_112127 =========
 
 
 
 
 
 
@@ -10,52 +10,83 @@
 打开网站
 打开网站
 
 
 
 
->>> cases\2普通会员登录\
+>>> cases\4超级订阅用户登录\
 
 
-[ suite setup ] cases\2普通会员登录\
+[ suite setup ] cases\4超级订阅用户登录\
 登录网站
 登录网站
 
 
 
 
->>> cases\2普通会员登录\搜索\招标搜索\
+>>> cases\4超级订阅用户登录\搜索\
+
+[ suite setup ] cases\4超级订阅用户登录\搜索\
+suite setup fail | Message: element click intercepted: Element <input class="btn" type="button" onclick="zbSeatch('zbIndex')"> is not clickable at point (1046, 213). Other element would receive the click: <div class="modal fade bidLogin in" id="bidLogin" tabindex="-1" role="dialog" aria-labelledby="bidLogin" aria-hidden="false" style="display: block; padding-right: 5px;">...</div>
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File "cases\4超级订阅用户登录\搜索\__st__.py", line 5, in suite_setup
+    sp.go_to_search()
+  File "E:\project\jianyu_auto\pageobject\search_page.py", line 74, in go_to_search
+    bp.click(self.search_loc)
+  File "E:\project\jianyu_auto\base\base_apge.py", line 100, in click
+    self.locator_element(loc).click()
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
+    return self._parent.execute(command, params)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
+    self.error_handler.check_response(response)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <input class="btn" type="button" onclick="zbSeatch('zbIndex')"> is not clickable at point (1046, 213). Other element would receive the click: <div class="modal fade bidLogin in" id="bidLogin" tabindex="-1" role="dialog" aria-labelledby="bidLogin" aria-hidden="false" style="display: block; padding-right: 5px;">...</div>
+  (Session info: chrome=88.0.4324.190)
+
+
+
+[ suite teardown ] cases\4超级订阅用户登录\
+suite teardown fail | Message: element click intercepted: Element <a class="logo" href="/" data-cl-id="866346189">...</a> is not clickable at point (233, 31). Other element would receive the click: <div class="modal fade bidLogin in" id="bidLogin" tabindex="-1" role="dialog" aria-labelledby="bidLogin" aria-hidden="false" style="display: block; padding-right: 5px;">...</div>
+  (Session info: chrome=88.0.4324.190)
+ 
+Traceback:
+  File "cases\4超级订阅用户登录\__st__.py", line 14, in suite_teardown
+    ip.go_to_index()
+  File "E:\project\jianyu_auto\pageobject\index_page.py", line 116, in go_to_index
+    bp.click(self.logo_loc)
+  File "E:\project\jianyu_auto\base\base_apge.py", line 100, in click
+    self.locator_element(loc).click()
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
+    self._execute(Command.CLICK_ELEMENT)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
+    return self._parent.execute(command, params)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
+    self.error_handler.check_response(response)
+  File "c:\users\liumiaomiao\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
+    raise exception_class(message, screen, stacktrace)
+selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <a class="logo" href="/" data-cl-id="866346189">...</a> is not clickable at point (233, 31). Other element would receive the click: <div class="modal fade bidLogin in" id="bidLogin" tabindex="-1" role="dialog" aria-labelledby="bidLogin" aria-hidden="false" style="display: block; padding-right: 5px;">...</div>
+  (Session info: chrome=88.0.4324.190)
 
 
-[ suite setup ] cases\2普通会员登录\搜索\招标搜索\
 
 
 
 
->>> cases\2普通会员登录\搜索\招标搜索\企业搜索.py
-
-* 企业搜索---bidwin_test2001  -  2022-04-15 11:02:10
-
-  [ case execution steps ]
-
-** 检查点 **  搜索结果三级页正常打开,中标企业显示和搜索一致 ---->  通过
-
-  PASS 
-
-[ case teardown ] 企业搜索---bidwin_test2001
-
-[ suite teardown ] cases\2普通会员登录\搜索\招标搜索\
-
 [ suite teardown ] cases\
 [ suite teardown ] cases\
 suite_teardown
 suite_teardown
 
 
 
 
-  ========= 测试结束 : 20220415_110257 =========
+  ========= 测试结束 : 20220602_112151 =========
 
 
 
 
-  耗时    : 82.624 秒
+  耗时    : 24.417 秒
 
 
 
 
-  用例数量 : 1
+  用例数量 : 0
 
 
-  通过 : 1
+  通过 : 0
 
 
   失败 : 0
   失败 : 0
 
 
   异常 : 0
   异常 : 0
 
 
-  套件初始化失败 : 0
+  套件初始化失败 : 1
 
 
-  套件清除  失败 : 0
+  套件清除  失败 : 1
 
 
   用例初始化失败 : 0
   用例初始化失败 : 0
 
 

File diff suppressed because it is too large
+ 25 - 1814
log/testresult.log.2


BIN
pageobject/__pycache__/bigmember_bidforecast.cpython-37.pyc


BIN
pageobject/__pycache__/bigmember_bidforecast_detail_page.cpython-37.pyc


BIN
pageobject/__pycache__/bigmember_index_page.cpython-37.pyc


BIN
pageobject/__pycache__/bigmember_main_page.cpython-37.pyc


BIN
pageobject/__pycache__/bigmember_monitor_page.cpython-37.pyc


BIN
pageobject/__pycache__/login_page.cpython-37.pyc


+ 5 - 0
pageobject/bigmember_bidforecast.py

@@ -1,6 +1,10 @@
 from base.base_apge import bp
 from base.base_apge import bp
 from selenium.webdriver.common.by import By
 from selenium.webdriver.common.by import By
 import time
 import time
+
+from pageobject.bigmember_bidforecast_detail_page import fd
+
+
 class BidForecast:
 class BidForecast:
     #中标企业预测页面
     #中标企业预测页面
     input_loc=(By.XPATH,'//input[@placeholder="输入需要预测的项目名称"]')#输入框
     input_loc=(By.XPATH,'//input[@placeholder="输入需要预测的项目名称"]')#输入框
@@ -12,4 +16,5 @@ class BidForecast:
         time.sleep(3)
         time.sleep(3)
         bp.click(self.association_loc)
         bp.click(self.association_loc)
         time.sleep(3)
         time.sleep(3)
+        fd.start_forecast()
 bf=BidForecast()
 bf=BidForecast()

+ 1 - 1
pageobject/bigmember_bidforecast_detail_page.py

@@ -8,7 +8,7 @@ class ForecastDetail:
     #点击预测
     #点击预测
     def start_forecast(self):
     def start_forecast(self):
         bp.click(self.start_loc)
         bp.click(self.start_loc)
-        time.sleep(5)
+        time.sleep(10)
     #预测结果
     #预测结果
     def return_forecast_result(self):
     def return_forecast_result(self):
         purchasing_unit=bp.obtain_text(self.purchasing_unit_loc)
         purchasing_unit=bp.obtain_text(self.purchasing_unit_loc)

+ 3 - 1
pageobject/bigmember_index_page.py

@@ -29,10 +29,12 @@ class BigIndex:
     #免费用户点击  免费体验
     #免费用户点击  免费体验
     def click_experience(self):
     def click_experience(self):
         time.sleep(3)
         time.sleep(3)
+        bp.slide_upward1000()
         bp.click(self.experience_local)
         bp.click(self.experience_local)
         time.sleep(3)
         time.sleep(3)
     #大会员用户登录后,大会员落地页为 立即使用按钮
     #大会员用户登录后,大会员落地页为 立即使用按钮
     def use_now(self):
     def use_now(self):
-        use_text=bp.obtain_key(self.buy_local,'textContent')
+        bp.slide_upward1000()
+        use_text=bp.obtain_key(self.experience_local,'textContent')
         return use_text
         return use_text
 bi=BigIndex()
 bi=BigIndex()

+ 8 - 7
pageobject/bigmember_main_page.py

@@ -9,15 +9,15 @@ class BigMain:
     #常用功能模块
     #常用功能模块
     common_bidsearch_loc=(By.XPATH,'//span[text()="招标搜索"]')#招标搜索
     common_bidsearch_loc=(By.XPATH,'//span[text()="招标搜索"]')#招标搜索
     common_enterprisesearch_loc = (By.XPATH,'//span[text()="企业搜索"]')  # 企业搜索
     common_enterprisesearch_loc = (By.XPATH,'//span[text()="企业搜索"]')  # 企业搜索
-    common_subscription_loc = (By.XPATH,'//span[text()="订阅管理"]')  # 订阅管理
+    common_subscription_loc = (By.XPATH,'//div[@class="list-item"]//span[text()="订阅管理"]')  # 订阅管理
     common_data_loc = (By.XPATH, '//span[text()="数据自助导出"]')  # 数据自助导出
     common_data_loc = (By.XPATH, '//span[text()="数据自助导出"]')  # 数据自助导出
-    common_record_loc = (By.XPATH, '//span[text()="数据导出记录"]')  # 数据导出记录
+    common_record_loc = (By.XPATH, '//div[@class="list-item"]//span[text()="数据导出记录"]')  # 数据导出记录
     common_add=(By.XPATH,'//span[@class="icon-add"]')#添加常见功能
     common_add=(By.XPATH,'//span[@class="icon-add"]')#添加常见功能
     common_list=(By.XPATH,'//div[@class="list-item"]')#常用功能列表,数量
     common_list=(By.XPATH,'//div[@class="list-item"]')#常用功能列表,数量
     common_new_function=(By.XPATH,'//div[@class="list-item"][last()]/span')#常用功能最后一个,也就是新加的功能
     common_new_function=(By.XPATH,'//div[@class="list-item"][last()]/span')#常用功能最后一个,也就是新加的功能
     #常用功能设置
     #常用功能设置
     bid_collection=(By.XPATH,'//div[@role="group"]//span[text()="标讯收藏"]')#标讯收藏
     bid_collection=(By.XPATH,'//div[@role="group"]//span[text()="标讯收藏"]')#标讯收藏
-    arrow_right=(By.XPATH,'//i[@class="el-icon-arrow-right"]')#选中向右移动
+    arrow_right=(By.XPATH,'//div[@class="el-transfer__buttons"]//i[@class="el-icon-arrow-right"]')#选中向右移动
     arrow_left = (By.XPATH, '//i[@class="el-icon-arrow-left"]')  # 选中向左移动
     arrow_left = (By.XPATH, '//i[@class="el-icon-arrow-left"]')  # 选中向左移动
     sure_loc=(By.XPATH,'//span[text()="确定"]')#确定按钮
     sure_loc=(By.XPATH,'//span[text()="确定"]')#确定按钮
     #页面动作,常用功能模块
     #页面动作,常用功能模块
@@ -50,11 +50,12 @@ class BigMain:
         default_url = self.click_function(self.common_record_loc)
         default_url = self.click_function(self.common_record_loc)
         return default_url
         return default_url
     def close_bigwindow(self):
     def close_bigwindow(self):
-        mainwidow = bp.mark_main_window()
-        time.sleep(3)
-        allwindow = bp.mark_all_window()
+        # mainwidow = bp.mark_main_window()
+        # allwindow = bp.mark_all_window()
         bp.close_window()
         bp.close_window()
-        bp.goto_new_window(mainwidow, allwindow)
+        bp.switch_to_firstwindow()
+        time.sleep(3)
+        # bp.goto_new_window(mainwidow,allwindow)
     #增加常用功能
     #增加常用功能
     def add_common_fuction(self):
     def add_common_fuction(self):
         bp.click(self.common_add)
         bp.click(self.common_add)

+ 1 - 1
pageobject/bigmember_monitor_page.py

@@ -15,7 +15,7 @@ class BigMonitor:
     group_loc=(By.XPATH,'//div[@class="list_li_item item-flex-column"]/span')#所有企业分组
     group_loc=(By.XPATH,'//div[@class="list_li_item item-flex-column"]/span')#所有企业分组
     input_loc=(By.XPATH,'//input[@placeholder="请输入已关注企业名称"]')#请输入已关注企业名称
     input_loc=(By.XPATH,'//input[@placeholder="请输入已关注企业名称"]')#请输入已关注企业名称
     button_loc=(By.XPATH,'//button[@type="button"]')#搜索按钮
     button_loc=(By.XPATH,'//button[@type="button"]')#搜索按钮
-    title_loc=(By.XPATH,'//div[@class="list_name ent_li_name"]')#列表的 企业名称
+    title_loc=(By.XPATH,'//div[@class="list_name ent_li_name visited-hd"][1]')#列表的 企业名称
     nodata_loc=(By.XPATH,'//div[@class="empty-main"]')#暂无数据
     nodata_loc=(By.XPATH,'//div[@class="empty-main"]')#暂无数据
     #搜索暂无数据
     #搜索暂无数据
     def search_none(self,value):
     def search_none(self,value):

+ 15 - 6
pageobject/login_page.py

@@ -14,6 +14,7 @@ class LoginPage():
     error_loc=(By.CLASS_NAME,'is-error')
     error_loc=(By.CLASS_NAME,'is-error')
     img_loc=(By.XPATH,'//img[@class="imgShow"]')
     img_loc=(By.XPATH,'//img[@class="imgShow"]')
     exit_loc=(By.XPATH,'//span[text()="退出"]')
     exit_loc=(By.XPATH,'//span[text()="退出"]')
+    close_loginbox=(By.XPATH,'//div[@onclick="closeLoginDig()"]')#登录框叉号
     # 页面动作1
     # 页面动作1
     def go_to_login(self):
     def go_to_login(self):
         bp.click(self.login_Loc)
         bp.click(self.login_Loc)
@@ -21,7 +22,7 @@ class LoginPage():
         bp.click(self.pass_loc)
         bp.click(self.pass_loc)
         time.sleep(3)
         time.sleep(3)
     #页面动作2
     #页面动作2
-    def login_web(self,phone='13592420982',password='123123'):
+    def login_web(self,phone='13592420982',password='070409'):
         bp.send_keys(self.phone_loc, phone)
         bp.send_keys(self.phone_loc, phone)
         bp.send_keys(self.password_loc, password)
         bp.send_keys(self.password_loc, password)
         bp.click(self.submit_loc)
         bp.click(self.submit_loc)
@@ -31,13 +32,13 @@ class LoginPage():
         bp.send_keys(self.password_loc, password)
         bp.send_keys(self.password_loc, password)
         bp.click(self.submit_loc)
         bp.click(self.submit_loc)
     # 超级订阅用户登录
     # 超级订阅用户登录
-    def super_login(self, phone='15225181827', password='123456'):
+    def super_login(self, phone='18738620000', password='111111'):
         bp.send_keys(self.phone_loc, phone)
         bp.send_keys(self.phone_loc, phone)
         bp.send_keys(self.password_loc, password)
         bp.send_keys(self.password_loc, password)
         bp.click(self.submit_loc)
         bp.click(self.submit_loc)
     # 页面动作3
     # 页面动作3
     def normal_login(self):
     def normal_login(self):
-        self.login_web()
+        self.free_login()
         time.sleep(3)
         time.sleep(3)
         temp=bp.obtain_key(self.news_loc,'class')
         temp=bp.obtain_key(self.news_loc,'class')
         if temp=='list-msg':
         if temp=='list-msg':
@@ -51,9 +52,15 @@ class LoginPage():
     def exit_web(self):
     def exit_web(self):
         # bp.click(self.img_loc)
         # bp.click(self.img_loc)
         bp.mouse_over(self.login_Loc)
         bp.mouse_over(self.login_Loc)
-        time.sleep(2)
+        time.sleep(3)
+        bp.click(self.exit_loc)
+    #菜单多的用户退出
+    def exit(self):
+        # bp.click(self.img_loc)
+        bp.mouse_over(self.login_Loc)
+        bp.slide_upward()
+        time.sleep(3)
         bp.click(self.exit_loc)
         bp.click(self.exit_loc)
-
     # 页面动作6
     # 页面动作6
     def one_input(self,phone,password):
     def one_input(self,phone,password):
         if phone is not None:
         if phone is not None:
@@ -66,5 +73,7 @@ class LoginPage():
     def clear_login_input(self):
     def clear_login_input(self):
         bp.clear_input(self.phone_loc)
         bp.clear_input(self.phone_loc)
         bp.clear_input(self.password_loc)
         bp.clear_input(self.password_loc)
-
+    #关闭登陆框
+    def close_login_box(self):
+        bp.click(self.close_loginbox)
 lp=LoginPage()
 lp=LoginPage()

Some files were not shown because too many files changed in this diff