cucu 1.0.13__tar.gz → 1.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cucu might be problematic. Click here for more details.

Files changed (264) hide show
  1. {cucu-1.0.13 → cucu-1.1.2}/CHANGELOG.md +13 -0
  2. {cucu-1.0.13 → cucu-1.1.2}/PKG-INFO +57 -41
  3. {cucu-1.0.13 → cucu-1.1.2}/README.md +49 -33
  4. {cucu-1.0.13 → cucu-1.1.2}/pyproject.toml +19 -8
  5. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/behave_tweaks.py +6 -2
  6. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/cli/core.py +43 -7
  7. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/cli/run.py +3 -3
  8. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/cli/steps.py +4 -0
  9. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/environment.py +3 -3
  10. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/formatter/cucu.py +4 -0
  11. cucu-1.1.2/src/cucu/init_data/.gitignore +5 -0
  12. cucu-1.1.2/src/cucu/init_data/README.md +63 -0
  13. cucu-1.1.2/src/cucu/init_data/cucurc.yml +10 -0
  14. cucu-1.1.2/src/cucu/init_data/data/www/example.html +27 -0
  15. cucu-1.1.2/src/cucu/init_data/features/cucurc.yml +9 -0
  16. cucu-1.1.2/src/cucu/init_data/features/environment.py +90 -0
  17. cucu-1.1.2/src/cucu/init_data/features/example.feature +18 -0
  18. cucu-1.1.2/src/cucu/init_data/features/lint_rules/sid.yaml +29 -0
  19. cucu-1.1.2/src/cucu/init_data/features/steps/__init__.py +7 -0
  20. cucu-1.1.2/src/cucu/init_data/features/steps/my_steps.py +26 -0
  21. cucu-1.0.13/.circleci/config.yml +0 -262
  22. cucu-1.0.13/.env +0 -1
  23. cucu-1.0.13/.github/CODEOWNERS +0 -2
  24. cucu-1.0.13/.github/PULL_REQUEST_TEMPLATE.md +0 -25
  25. cucu-1.0.13/.github/workflows/build.yml +0 -126
  26. cucu-1.0.13/.github/workflows/create_a_new_release.yml +0 -45
  27. cucu-1.0.13/.github/workflows/publish-production.yml +0 -31
  28. cucu-1.0.13/.github/workflows/publish-test.yml +0 -35
  29. cucu-1.0.13/.pre-commit-config.yaml +0 -21
  30. cucu-1.0.13/.python-version +0 -1
  31. cucu-1.0.13/CODE_OF_CONDUCT.md +0 -39
  32. cucu-1.0.13/CONTRIBUTING.md +0 -231
  33. cucu-1.0.13/CONTRIBUTORS.md +0 -19
  34. cucu-1.0.13/Makefile +0 -70
  35. cucu-1.0.13/bin/cucu +0 -2
  36. cucu-1.0.13/bin/start_seleniarm_hub.sh +0 -16
  37. cucu-1.0.13/bin/start_selenium_hub.sh +0 -17
  38. cucu-1.0.13/cortex.yaml +0 -18
  39. cucu-1.0.13/data/features/custom_step_test/custom_step.feature +0 -4
  40. cucu-1.0.13/data/features/custom_step_test/steps/__init__.py +0 -2
  41. cucu-1.0.13/data/features/custom_step_test/steps/cucu_steps.py +0 -6
  42. cucu-1.0.13/data/features/echo.feature +0 -20
  43. cucu-1.0.13/data/features/environment.py +0 -2
  44. cucu-1.0.13/data/features/feature_skipping_scenarios_by_file_presence.feature +0 -9
  45. cucu-1.0.13/data/features/feature_with_background.feature +0 -11
  46. cucu-1.0.13/data/features/feature_with_background_using_substeps.feature +0 -8
  47. cucu-1.0.13/data/features/feature_with_failing_scenario.feature +0 -5
  48. cucu-1.0.13/data/features/feature_with_failing_scenario_with_table.feature +0 -8
  49. cucu-1.0.13/data/features/feature_with_failing_scenario_with_web.feature +0 -7
  50. cucu-1.0.13/data/features/feature_with_logging.feature +0 -6
  51. cucu-1.0.13/data/features/feature_with_long_names.feature +0 -5
  52. cucu-1.0.13/data/features/feature_with_mixed_results.feature +0 -28
  53. cucu-1.0.13/data/features/feature_with_multilines_and_tables.feature +0 -18
  54. cucu-1.0.13/data/features/feature_with_passing_scenario.feature +0 -5
  55. cucu-1.0.13/data/features/feature_with_passing_scenario_with_web.feature +0 -6
  56. cucu-1.0.13/data/features/feature_with_platform_specific_scenarios.feature +0 -9
  57. cucu-1.0.13/data/features/feature_with_scenario_outline.feature +0 -9
  58. cucu-1.0.13/data/features/feature_with_scenario_using_nth_type.feature +0 -4
  59. cucu-1.0.13/data/features/feature_with_tagging.feature +0 -14
  60. cucu-1.0.13/data/features/feature_with_xml_tags.feature +0 -4
  61. cucu-1.0.13/data/features/multiple_scenarios_with_browser_steps.feature +0 -11
  62. cucu-1.0.13/data/features/scenario_stop_retry_early.feature +0 -6
  63. cucu-1.0.13/data/features/scenario_that_fails_with_after_scenario_steps.feature +0 -14
  64. cucu-1.0.13/data/features/scenario_that_passes_with_after_scenario_steps.feature +0 -13
  65. cucu-1.0.13/data/features/scenario_with_console_logs.feature +0 -10
  66. cucu-1.0.13/data/features/scenario_with_substeps.feature +0 -5
  67. cucu-1.0.13/data/features/scenario_with_substeps_and_logging.feature +0 -5
  68. cucu-1.0.13/data/features/slow_features/slow_feature1.feature +0 -4
  69. cucu-1.0.13/data/features/slow_features/slow_feature2.feature +0 -4
  70. cucu-1.0.13/data/features/slow_features/slow_feature3.feature +0 -4
  71. cucu-1.0.13/data/features/slow_features/slow_feature4.feature +0 -4
  72. cucu-1.0.13/data/features/slow_features/slow_feature5.feature +0 -4
  73. cucu-1.0.13/data/features/steps/__init__.py +0 -1
  74. cucu-1.0.13/data/features/steps/cucu_steps.py +0 -91
  75. cucu-1.0.13/data/features/tagged_features/tagged_feature1.feature +0 -6
  76. cucu-1.0.13/data/features/tagged_features/tagged_feature2.feature +0 -6
  77. cucu-1.0.13/data/features/tagged_features/tagged_feature3.feature +0 -6
  78. cucu-1.0.13/data/features/with_secret/cucurc.yml +0 -1
  79. cucu-1.0.13/data/features/with_secret/scenario_with_comments.feature +0 -28
  80. cucu-1.0.13/data/unit/ansi.log +0 -76
  81. cucu-1.0.13/data/unit/ansi.log.html +0 -88
  82. cucu-1.0.13/data/www/broken_images.html +0 -9
  83. cucu-1.0.13/data/www/buttons.html +0 -34
  84. cucu-1.0.13/data/www/checkboxes.html +0 -111
  85. cucu-1.0.13/data/www/clipboard.html +0 -39
  86. cucu-1.0.13/data/www/comboboxes.html +0 -533
  87. cucu-1.0.13/data/www/console_logging.html +0 -14
  88. cucu-1.0.13/data/www/cookies.html +0 -12
  89. cucu-1.0.13/data/www/counter.html +0 -18
  90. cucu-1.0.13/data/www/drag_drop.html +0 -89
  91. cucu-1.0.13/data/www/draggables.html +0 -53
  92. cucu-1.0.13/data/www/dropdowns.html +0 -27
  93. cucu-1.0.13/data/www/duplicate_buttons.html +0 -24
  94. cucu-1.0.13/data/www/duplicate_inputs.html +0 -23
  95. cucu-1.0.13/data/www/dynamic_dropdown.html +0 -46
  96. cucu-1.0.13/data/www/file.txt +0 -1
  97. cucu-1.0.13/data/www/files.html +0 -14
  98. cucu-1.0.13/data/www/frames.html +0 -22
  99. cucu-1.0.13/data/www/fuzzy_rules.html +0 -63
  100. cucu-1.0.13/data/www/images.html +0 -8
  101. cucu-1.0.13/data/www/inputs.html +0 -45
  102. cucu-1.0.13/data/www/js/util.js +0 -20
  103. cucu-1.0.13/data/www/links.html +0 -30
  104. cucu-1.0.13/data/www/nothing_to_see_here.html +0 -8
  105. cucu-1.0.13/data/www/page_that_loads_forever.html +0 -14
  106. cucu-1.0.13/data/www/radio_buttons.html +0 -33
  107. cucu-1.0.13/data/www/stars.png +0 -0
  108. cucu-1.0.13/data/www/tables.html +0 -151
  109. cucu-1.0.13/data/www/tabs.html +0 -312
  110. cucu-1.0.13/data/www/text.html +0 -23
  111. cucu-1.0.13/features/browser/browser_tab_managemenet.feature +0 -36
  112. cucu-1.0.13/features/browser/browser_window_managemenet.feature +0 -82
  113. cucu-1.0.13/features/browser/buttons.feature +0 -120
  114. cucu-1.0.13/features/browser/checkboxes.feature +0 -38
  115. cucu-1.0.13/features/browser/clipboard.feature +0 -26
  116. cucu-1.0.13/features/browser/comboboxes.feature +0 -22
  117. cucu-1.0.13/features/browser/console_logs.feature +0 -22
  118. cucu-1.0.13/features/browser/cookies.feature +0 -18
  119. cucu-1.0.13/features/browser/draggables.feature +0 -36
  120. cucu-1.0.13/features/browser/dropdowns.feature +0 -50
  121. cucu-1.0.13/features/browser/duplicate_buttons.feature +0 -38
  122. cucu-1.0.13/features/browser/duplicate_draggables.feature +0 -34
  123. cucu-1.0.13/features/browser/duplicate_inputs.feature +0 -16
  124. cucu-1.0.13/features/browser/file_downloads.feature +0 -22
  125. cucu-1.0.13/features/browser/file_upload.feature +0 -17
  126. cucu-1.0.13/features/browser/frames.feature +0 -38
  127. cucu-1.0.13/features/browser/fuzzy_rules.feature +0 -25
  128. cucu-1.0.13/features/browser/helpers.feature +0 -61
  129. cucu-1.0.13/features/browser/images.feature +0 -17
  130. cucu-1.0.13/features/browser/inputs.feature +0 -193
  131. cucu-1.0.13/features/browser/inputs_limits.feature +0 -32
  132. cucu-1.0.13/features/browser/links.feature +0 -29
  133. cucu-1.0.13/features/browser/mht.feature +0 -59
  134. cucu-1.0.13/features/browser/page_checks.feature +0 -102
  135. cucu-1.0.13/features/browser/radio_buttons.feature +0 -39
  136. cucu-1.0.13/features/browser/tables.feature +0 -186
  137. cucu-1.0.13/features/browser/tabs.feature +0 -16
  138. cucu-1.0.13/features/browser/text.feature +0 -92
  139. cucu-1.0.13/features/cli/config.feature +0 -165
  140. cucu-1.0.13/features/cli/help.feature +0 -26
  141. cucu-1.0.13/features/cli/internals.feature +0 -113
  142. cucu-1.0.13/features/cli/ipdb.feature +0 -16
  143. cucu-1.0.13/features/cli/lint.feature +0 -441
  144. cucu-1.0.13/features/cli/lsp.feature +0 -11
  145. cucu-1.0.13/features/cli/report_basics.feature +0 -340
  146. cucu-1.0.13/features/cli/report_search_and_sorting.feature +0 -69
  147. cucu-1.0.13/features/cli/report_with_custom_failure_handler.feature +0 -98
  148. cucu-1.0.13/features/cli/report_with_custom_subheader.feature +0 -69
  149. cucu-1.0.13/features/cli/report_with_custom_tags.feature +0 -81
  150. cucu-1.0.13/features/cli/run.feature +0 -112
  151. cucu-1.0.13/features/cli/run_outputs.feature +0 -253
  152. cucu-1.0.13/features/cli/run_with_hooks.feature +0 -343
  153. cucu-1.0.13/features/cli/run_with_junit.feature +0 -40
  154. cucu-1.0.13/features/cli/run_with_logging.feature +0 -46
  155. cucu-1.0.13/features/cli/run_with_report.feature +0 -29
  156. cucu-1.0.13/features/cli/run_with_tags.feature +0 -55
  157. cucu-1.0.13/features/cli/run_with_thread_dumper.feature +0 -25
  158. cucu-1.0.13/features/cli/run_with_workers.feature +0 -51
  159. cucu-1.0.13/features/cli/secrets.feature +0 -181
  160. cucu-1.0.13/features/cli/steps.feature +0 -59
  161. cucu-1.0.13/features/cli/vars.feature +0 -135
  162. cucu-1.0.13/features/environment.py +0 -31
  163. cucu-1.0.13/features/flow_control/before_retry_handlers.feature +0 -52
  164. cucu-1.0.13/features/flow_control/repeating_steps.feature +0 -29
  165. cucu-1.0.13/features/flow_control/run_after_scenario_steps.feature +0 -11
  166. cucu-1.0.13/features/flow_control/run_and_measure.feature +0 -86
  167. cucu-1.0.13/features/flow_control/run_other_features.feature +0 -12
  168. cucu-1.0.13/features/flow_control/run_scenarios_conditionally.feature +0 -55
  169. cucu-1.0.13/features/flow_control/run_steps_conditionally.feature +0 -60
  170. cucu-1.0.13/features/flow_control/run_steps_on_element_visibilty.feature +0 -39
  171. cucu-1.0.13/features/flow_control/wait_for_steps.feature +0 -76
  172. cucu-1.0.13/features/os/command_steps.feature +0 -64
  173. cucu-1.0.13/features/os/file_steps.feature +0 -24
  174. cucu-1.0.13/features/os/platform_steps.feature +0 -15
  175. cucu-1.0.13/features/os/screenshot.feature +0 -10
  176. cucu-1.0.13/features/os/variables.feature +0 -32
  177. cucu-1.0.13/features/steps/__init__.py +0 -2
  178. cucu-1.0.13/features/steps/cucu_steps.py +0 -17
  179. cucu-1.0.13/logo.png +0 -0
  180. cucu-1.0.13/renovate.json +0 -47
  181. cucu-1.0.13/sonar-project.properties +0 -6
  182. cucu-1.0.13/tests/__init__.py +0 -0
  183. cucu-1.0.13/tests/test_behave_tweaks.py +0 -28
  184. cucu-1.0.13/tests/test_browser.py +0 -25
  185. cucu-1.0.13/tests/test_config.py +0 -133
  186. cucu-1.0.13/tests/test_core.py +0 -33
  187. cucu-1.0.13/tests/test_language_server.py +0 -32
  188. cucu-1.0.13/tests/test_reporter_parser.py +0 -12
  189. cucu-1.0.13/tests/test_table_steps.py +0 -55
  190. cucu-1.0.13/uv.lock +0 -1221
  191. {cucu-1.0.13 → cucu-1.1.2}/.gitignore +0 -0
  192. {cucu-1.0.13 → cucu-1.1.2}/LICENSE +0 -0
  193. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/__init__.py +0 -0
  194. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/ansi_parser.py +0 -0
  195. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/browser/__init__.py +0 -0
  196. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/browser/core.py +0 -0
  197. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/browser/frames.py +0 -0
  198. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/browser/selenium.py +0 -0
  199. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/browser/selenium_tweaks.py +0 -0
  200. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/cli/__init__.py +0 -0
  201. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/cli/thread_dumper.py +0 -0
  202. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/config.py +0 -0
  203. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/edgedriver_autoinstaller/README.md +0 -0
  204. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/edgedriver_autoinstaller/__init__.py +0 -0
  205. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/edgedriver_autoinstaller/utils.py +0 -0
  206. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/external/jquery/jquery-3.5.1.min.js +0 -0
  207. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/formatter/__init__.py +0 -0
  208. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/formatter/json.py +0 -0
  209. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/formatter/junit.py +0 -0
  210. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/fuzzy/__init__.py +0 -0
  211. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/fuzzy/core.py +0 -0
  212. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/fuzzy/fuzzy.js +0 -0
  213. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/helpers.py +0 -0
  214. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/hooks.py +0 -0
  215. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/language_server/__init__.py +0 -0
  216. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/language_server/core.py +0 -0
  217. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/lint/__init__.py +0 -0
  218. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/lint/linter.py +0 -0
  219. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/lint/rules/format.yaml +0 -0
  220. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/logger.py +0 -0
  221. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/matcher/__init__.py +0 -0
  222. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/matcher/core.py +0 -0
  223. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/page_checks.py +0 -0
  224. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/__init__.py +0 -0
  225. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/bootstrap.min.css +0 -0
  226. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/bootstrap.min.js +0 -0
  227. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/dataTables.bootstrap.min.css +0 -0
  228. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/dataTables.bootstrap.min.js +0 -0
  229. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/jquery-3.5.1.min.js +0 -0
  230. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/jquery.dataTables.min.js +0 -0
  231. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/external/popper.min.js +0 -0
  232. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/favicon.png +0 -0
  233. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/html.py +0 -0
  234. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/templates/feature.html +0 -0
  235. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/templates/flat.html +0 -0
  236. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/templates/index.html +0 -0
  237. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/templates/layout.html +0 -0
  238. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/reporter/templates/scenario.html +0 -0
  239. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/__init__.py +0 -0
  240. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/base_steps.py +0 -0
  241. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/browser_steps.py +0 -0
  242. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/button_steps.py +0 -0
  243. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/checkbox_steps.py +0 -0
  244. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/command_steps.py +0 -0
  245. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/comment_steps.py +0 -0
  246. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/draggable_steps.py +0 -0
  247. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/dropdown_steps.py +0 -0
  248. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/file_input_steps.py +0 -0
  249. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/filesystem_steps.py +0 -0
  250. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/flow_control_steps.py +0 -0
  251. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/image_steps.py +0 -0
  252. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/input_steps.py +0 -0
  253. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/link_steps.py +0 -0
  254. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/menuitem_steps.py +0 -0
  255. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/platform_steps.py +0 -0
  256. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/radio_steps.py +0 -0
  257. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/step_utils.py +0 -0
  258. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/tab_steps.py +0 -0
  259. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/table_steps.py +0 -0
  260. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/tables.js +0 -0
  261. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/text_steps.py +0 -0
  262. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/variable_steps.py +0 -0
  263. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/steps/webserver_steps.py +0 -0
  264. {cucu-1.0.13 → cucu-1.1.2}/src/cucu/utils.py +0 -0
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project closely adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 1.1.2
9
+ - Add - `cucu init` command to setup new projects
10
+
11
+ ## 1.1.1
12
+ - Chore - bump coverage lib from 7.6.12 to 7.8.0
13
+ - Chore - change CI to not use experimental COVERAGE_CORE=sysmon
14
+
15
+ ## 1.1.0
16
+ - Add - now python 3.13 compatible
17
+ - Change - use stdlib pdb instead of unsupported ipdb
18
+ - Change - rename CUCU_IPDB_ON_FAILURE => to CUCU_DEBUG_ON_FAILURE
19
+ - Chore - bump selenium lib to 4.31.0
20
+
8
21
  ## 1.0.13
9
22
  - Change - rename logger.warn to logger.warning
10
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cucu
3
- Version: 1.0.13
3
+ Version: 1.1.2
4
4
  Summary: Easy BDD web testing
5
5
  Project-URL: Homepage, https://github.com/dominodatalab/cucu/wiki
6
6
  Project-URL: Download, https://pypi.org/project/cucu/
@@ -23,18 +23,18 @@ Classifier: Programming Language :: Python :: 3.9
23
23
  Classifier: Programming Language :: Python :: 3.10
24
24
  Classifier: Programming Language :: Python :: 3.11
25
25
  Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
26
27
  Classifier: Topic :: Software Development :: Testing :: BDD
27
28
  Requires-Python: >=3.9
28
29
  Requires-Dist: beautifulsoup4~=4.13.3
29
- Requires-Dist: behave~=1.2.6
30
+ Requires-Dist: behave==1.2.6
30
31
  Requires-Dist: chromedriver-autoinstaller~=0.6.2
31
32
  Requires-Dist: click~=8.1.7
32
- Requires-Dist: coverage[toml]~=7.6.12
33
+ Requires-Dist: coverage[toml]~=7.8
33
34
  Requires-Dist: geckodriver-autoinstaller~=0.1.0
34
35
  Requires-Dist: humanize~=4.12.1
35
- Requires-Dist: importlib-metadata~=8.6.1
36
- Requires-Dist: ipdb~=0.13.13
37
- Requires-Dist: jellyfish~=1.1.3
36
+ Requires-Dist: importlib-metadata~=8.7.0
37
+ Requires-Dist: jellyfish>=1.1
38
38
  Requires-Dist: jinja2~=3.1.3
39
39
  Requires-Dist: lsprotocol~=2023.0.1
40
40
  Requires-Dist: mpire~=2.10.2
@@ -42,9 +42,9 @@ Requires-Dist: psutil>=6.0
42
42
  Requires-Dist: pygls~=1.3.1
43
43
  Requires-Dist: pyyaml~=6.0.1
44
44
  Requires-Dist: requests<3.0.0,>=2.31.0
45
- Requires-Dist: selenium~=4.28
45
+ Requires-Dist: selenium~=4.31
46
46
  Requires-Dist: tabulate~=0.9.0
47
- Requires-Dist: tenacity~=9.0.0
47
+ Requires-Dist: tenacity>=9.0
48
48
  Description-Content-Type: text/markdown
49
49
 
50
50
  [![pypi](https://img.shields.io/pypi/v/cucu.svg)](https://pypi.org/project/cucu/)
@@ -90,8 +90,9 @@ to drive various underlying tools/frameworks to create real world testing scenar
90
90
 
91
91
  - [Installation](#installation)
92
92
  - [Requirements](#requirements)
93
- - [Install Walkthrough](#install-walkthrough)
94
- - [Usage](#usage)
93
+ - [Setup](#setup)
94
+ - [Usage](#usage)
95
+ - [Usage](#usage-1)
95
96
  - [Cucu Run](#cucu-run)
96
97
  - [Run specific browser version with docker](#run-specific-browser-version-with-docker)
97
98
  - [Extending Cucu](#extending-cucu)
@@ -103,40 +104,55 @@ to drive various underlying tools/frameworks to create real world testing scenar
103
104
  - [Install From Build](#install-from-build)
104
105
 
105
106
  # Installation
107
+ Let's get your repo to start using the cucu framework!
108
+ > [!NOTE] If you're not using uv, then just
109
+ > `pip install cucu` for your repo
110
+
106
111
  ## Requirements
107
- Cucu requires
108
- 1. python 3.9+
109
- 2. docker (to do UI testing)
112
+ 1. Docker (for UI testing)
113
+ 2. The [uv](https://docs.astral.sh/uv/) tool
114
+ 3. A repo in a clean state
110
115
 
111
- ## Install Walkthrough
112
- _Get your repo setup using cucu as a test framework_
116
+ ## Setup
117
+ > [!NOTE] Always run cucu from your repo root folder
113
118
 
114
- 1. install and start Docker if you haven't already
115
- 2. install [cucu](https://pypi.org/project/cucu/)
119
+ 1. Have docker running (don't need it right now, but why not get ready for testing)
120
+ 2. Make sure you have no files to commit and a clean working tree
116
121
  ```
117
- pip install cucu
122
+ git status
118
123
  ```
119
- 3. create the folder structure and files with content:
120
- _Cucu uses the [behave framework](https://github.com/behave/behave) which expects the `features/steps` directories_
121
- - features/
122
- - steps/
123
- - `__init__.py` # enables cucu and custom steps
124
- ```python
125
- # import all of the steps from cucu
126
- from cucu.steps import * # noqa: F403, F401
127
-
128
- # import individual sub-modules here (i.e. module names of your custom step py files)
129
- # Example: For file features/steps/ui/login.py
130
- # import steps.ui.login_steps
131
- ```
132
- - environment.py - enables before/after hooks
133
- ```python
134
- # flake8: noqa
135
- from cucu.environment import *
136
-
137
- # Define custom before/after hooks here
138
- ```
139
- 4. list available cucu steps
124
+ Should report: `nothing to commit, working tree clean`
125
+
126
+ 3. Add [cucu](https://pypi.org/project/cucu/) to your project and activate your venv
127
+ ```
128
+ uv add cucu --dev
129
+ source .venv/bin/activate
130
+ ```
131
+ 4. Initialize cucu (copies the `init_data` folder to your repo)
132
+ ```
133
+ cucu init
134
+ ```
135
+ 5. Manually resolve any file conflicts
136
+ ```
137
+ git status
138
+ ```
139
+ 6. Run the example tests
140
+ ```
141
+ cucu run features
142
+ ```
143
+ 7. Done! But there is more optional stuff you can do, like:
144
+ 1. Run with `--no-headless` mode to see the browser interaction
145
+ 2. Run with `--generate-report` (or `-g`) to generate the html **report/** folder
146
+ 3. Reference the exact test (i.e. scenario) with `features/example.feature:8` instead of using the `features` folder
147
+ ```
148
+ cucu run features/example.feature:8 -g --no-headless
149
+ ```
150
+
151
+ ## Usage
152
+ > [!Note] Cucu needs to be run from your **repo root** (i.e. the parent of the `features` folder)
153
+
154
+
155
+ 1. list available cucu steps
140
156
  ```bash
141
157
  cucu steps
142
158
  ```
@@ -145,7 +161,7 @@ _Get your repo setup using cucu as a test framework_
145
161
  cucu steps | fzf
146
162
  # start typing for search
147
163
  ```
148
- 5. **create your first cucu test**
164
+ 2. **create your first cucu test**
149
165
  - features/my_first_test.feature
150
166
  ```gherkin
151
167
  Feature: My First Cucu Test
@@ -157,7 +173,7 @@ _Get your repo setup using cucu as a test framework_
157
173
  And I click the button "Google Search"
158
174
  Then I wait to see the text "results"
159
175
  ```
160
- 6. **run it**
176
+ 3. **run it**
161
177
  ```bash
162
178
  cucu run features/my_first_test.feature
163
179
  ```
@@ -41,8 +41,9 @@ to drive various underlying tools/frameworks to create real world testing scenar
41
41
 
42
42
  - [Installation](#installation)
43
43
  - [Requirements](#requirements)
44
- - [Install Walkthrough](#install-walkthrough)
45
- - [Usage](#usage)
44
+ - [Setup](#setup)
45
+ - [Usage](#usage)
46
+ - [Usage](#usage-1)
46
47
  - [Cucu Run](#cucu-run)
47
48
  - [Run specific browser version with docker](#run-specific-browser-version-with-docker)
48
49
  - [Extending Cucu](#extending-cucu)
@@ -54,40 +55,55 @@ to drive various underlying tools/frameworks to create real world testing scenar
54
55
  - [Install From Build](#install-from-build)
55
56
 
56
57
  # Installation
58
+ Let's get your repo to start using the cucu framework!
59
+ > [!NOTE] If you're not using uv, then just
60
+ > `pip install cucu` for your repo
61
+
57
62
  ## Requirements
58
- Cucu requires
59
- 1. python 3.9+
60
- 2. docker (to do UI testing)
63
+ 1. Docker (for UI testing)
64
+ 2. The [uv](https://docs.astral.sh/uv/) tool
65
+ 3. A repo in a clean state
61
66
 
62
- ## Install Walkthrough
63
- _Get your repo setup using cucu as a test framework_
67
+ ## Setup
68
+ > [!NOTE] Always run cucu from your repo root folder
64
69
 
65
- 1. install and start Docker if you haven't already
66
- 2. install [cucu](https://pypi.org/project/cucu/)
70
+ 1. Have docker running (don't need it right now, but why not get ready for testing)
71
+ 2. Make sure you have no files to commit and a clean working tree
67
72
  ```
68
- pip install cucu
73
+ git status
69
74
  ```
70
- 3. create the folder structure and files with content:
71
- _Cucu uses the [behave framework](https://github.com/behave/behave) which expects the `features/steps` directories_
72
- - features/
73
- - steps/
74
- - `__init__.py` # enables cucu and custom steps
75
- ```python
76
- # import all of the steps from cucu
77
- from cucu.steps import * # noqa: F403, F401
78
-
79
- # import individual sub-modules here (i.e. module names of your custom step py files)
80
- # Example: For file features/steps/ui/login.py
81
- # import steps.ui.login_steps
82
- ```
83
- - environment.py - enables before/after hooks
84
- ```python
85
- # flake8: noqa
86
- from cucu.environment import *
87
-
88
- # Define custom before/after hooks here
89
- ```
90
- 4. list available cucu steps
75
+ Should report: `nothing to commit, working tree clean`
76
+
77
+ 3. Add [cucu](https://pypi.org/project/cucu/) to your project and activate your venv
78
+ ```
79
+ uv add cucu --dev
80
+ source .venv/bin/activate
81
+ ```
82
+ 4. Initialize cucu (copies the `init_data` folder to your repo)
83
+ ```
84
+ cucu init
85
+ ```
86
+ 5. Manually resolve any file conflicts
87
+ ```
88
+ git status
89
+ ```
90
+ 6. Run the example tests
91
+ ```
92
+ cucu run features
93
+ ```
94
+ 7. Done! But there is more optional stuff you can do, like:
95
+ 1. Run with `--no-headless` mode to see the browser interaction
96
+ 2. Run with `--generate-report` (or `-g`) to generate the html **report/** folder
97
+ 3. Reference the exact test (i.e. scenario) with `features/example.feature:8` instead of using the `features` folder
98
+ ```
99
+ cucu run features/example.feature:8 -g --no-headless
100
+ ```
101
+
102
+ ## Usage
103
+ > [!Note] Cucu needs to be run from your **repo root** (i.e. the parent of the `features` folder)
104
+
105
+
106
+ 1. list available cucu steps
91
107
  ```bash
92
108
  cucu steps
93
109
  ```
@@ -96,7 +112,7 @@ _Get your repo setup using cucu as a test framework_
96
112
  cucu steps | fzf
97
113
  # start typing for search
98
114
  ```
99
- 5. **create your first cucu test**
115
+ 2. **create your first cucu test**
100
116
  - features/my_first_test.feature
101
117
  ```gherkin
102
118
  Feature: My First Cucu Test
@@ -108,7 +124,7 @@ _Get your repo setup using cucu as a test framework_
108
124
  And I click the button "Google Search"
109
125
  Then I wait to see the text "results"
110
126
  ```
111
- 6. **run it**
127
+ 3. **run it**
112
128
  ```bash
113
129
  cucu run features/my_first_test.feature
114
130
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cucu"
3
- version = "1.0.13"
3
+ version = "1.1.2"
4
4
  description = "Easy BDD web testing"
5
5
  readme = "README.md"
6
6
  license = { text = "The Clear BSD License" }
@@ -33,6 +33,7 @@ classifiers = [
33
33
  "Programming Language :: Python :: 3.10",
34
34
  "Programming Language :: Python :: 3.11",
35
35
  "Programming Language :: Python :: 3.12",
36
+ "Programming Language :: Python :: 3.13",
36
37
  "Programming Language :: Python :: 3 :: Only",
37
38
  "Topic :: Software Development :: Testing :: BDD",
38
39
  ]
@@ -43,15 +44,14 @@ include = [
43
44
  requires-python = ">=3.9"
44
45
  dependencies = [
45
46
  "beautifulsoup4~=4.13.3",
46
- "behave~=1.2.6",
47
+ "behave==1.2.6",
47
48
  "chromedriver-autoinstaller~=0.6.2",
48
49
  "click~=8.1.7",
49
- "coverage[toml]~=7.6.12",
50
+ "coverage[toml]~=7.8",
50
51
  "geckodriver-autoinstaller~=0.1.0",
51
52
  "humanize~=4.12.1",
52
- "importlib-metadata~=8.6.1",
53
- "ipdb~=0.13.13",
54
- "jellyfish~=1.1.3",
53
+ "importlib-metadata~=8.7.0",
54
+ "jellyfish>=1.1",
55
55
  "jinja2~=3.1.3",
56
56
  "lsprotocol~=2023.0.1",
57
57
  "mpire~=2.10.2",
@@ -59,9 +59,9 @@ dependencies = [
59
59
  "pygls~=1.3.1",
60
60
  "pyyaml~=6.0.1",
61
61
  "requests>=2.31.0,<3.0.0",
62
- "selenium~=4.28",
62
+ "selenium~=4.31",
63
63
  "tabulate~=0.9.0",
64
- "tenacity~=9.0.0",
64
+ "tenacity>=9.0",
65
65
  ]
66
66
 
67
67
  [project.urls]
@@ -76,6 +76,17 @@ cucu = "cucu.cli:main"
76
76
  requires = ["hatchling"]
77
77
  build-backend = "hatchling.build"
78
78
 
79
+ [tool.hatch.build.targets.sdist]
80
+ include = [
81
+ "/src",
82
+ "/CHANGELOG.md",
83
+ ]
84
+ exclude = [
85
+ "/data",
86
+ "/features",
87
+ "/tests",
88
+ ]
89
+
79
90
  [tool.uv]
80
91
  dev-dependencies = [
81
92
  "pre-commit>=3.8.0",
@@ -3,10 +3,14 @@
3
3
  # writing while not interfering with the way behave does its own log
4
4
  # capturing
5
5
  #
6
+ import os
6
7
  import sys
7
8
  import warnings
8
9
  from functools import wraps
9
10
 
11
+ # set env var BEHAVE_STRIP_STEPS_WITH_TRAILING_COLON=yes before importing behave
12
+ os.environ["BEHAVE_STRIP_STEPS_WITH_TRAILING_COLON"] = "yes"
13
+
10
14
  import behave
11
15
  from behave.__main__ import main as original_behave_main
12
16
  from behave.model import Table
@@ -62,7 +66,7 @@ def init_step_hooks(stdout, stderr):
62
66
  # resolve variables in the table values
63
67
  if ctx.table is not None:
64
68
  ctx.table.original = Table(
65
- ctx.table.headings, rows=ctx.table.rows
69
+ ctx.table.headings, rows=ctx.table.rows, line=ctx.table.line
66
70
  )
67
71
  new_rows = []
68
72
  for row in ctx.table.rows:
@@ -119,7 +123,7 @@ def init_step_hooks(stdout, stderr):
119
123
 
120
124
  return wrapper
121
125
 
122
- behave.__dict__[decorator_name] = new_decorator
126
+ behave.__dict__[decorator_name.title()] = behave.__dict__[decorator_name] = new_decorator
123
127
 
124
128
 
125
129
  _stdout = sys.stdout
@@ -8,6 +8,7 @@ import sys
8
8
  import time
9
9
  import xml.etree.ElementTree as ET
10
10
  from importlib.metadata import version
11
+ from pathlib import Path
11
12
  from threading import Timer
12
13
 
13
14
  import click
@@ -90,10 +91,10 @@ def main():
90
91
  )
91
92
  @click.option("-n", "--name", help="used to specify the exact scenario to run")
92
93
  @click.option(
93
- "-i",
94
- "--ipdb-on-failure/--no-ipdb-on-failure",
94
+ "-d",
95
+ "--debug-on-failure/--no-debug-on-failure",
95
96
  default=False,
96
- help="on failure drop into the ipdb debug shell",
97
+ help="on failure drop into the debug shell",
97
98
  )
98
99
  @click.option(
99
100
  "-j",
@@ -213,7 +214,7 @@ def run(
213
214
  fail_fast,
214
215
  headless,
215
216
  name,
216
- ipdb_on_failure,
217
+ debug_on_failure,
217
218
  junit,
218
219
  junit_with_stacktrace,
219
220
  logging_level,
@@ -323,7 +324,7 @@ def run(
323
324
  fail_fast,
324
325
  headless,
325
326
  name,
326
- ipdb_on_failure,
327
+ debug_on_failure,
327
328
  junit,
328
329
  results,
329
330
  secrets,
@@ -415,7 +416,7 @@ def run(
415
416
  fail_fast,
416
417
  headless,
417
418
  name,
418
- ipdb_on_failure,
419
+ debug_on_failure,
419
420
  junit,
420
421
  results,
421
422
  secrets,
@@ -468,7 +469,9 @@ def run(
468
469
  time.sleep(1)
469
470
 
470
471
  if timeout_reached:
471
- logger.warning("Timeout reached, send kill signal to workers")
472
+ logger.warning(
473
+ "Timeout reached, send kill signal to workers"
474
+ )
472
475
  kill_workers()
473
476
 
474
477
  task_failed.update(async_results)
@@ -765,6 +768,39 @@ def vars(filepath):
765
768
  print(tabulate(variables, tablefmt="fancy_grid"))
766
769
 
767
770
 
771
+ @main.command()
772
+ @click.argument("filepath", default="")
773
+ @click.option(
774
+ "-l",
775
+ "--logging-level",
776
+ default="INFO",
777
+ help="set logging level to one of debug, warn or info (default)",
778
+ )
779
+ def init(filepath, logging_level):
780
+ """
781
+ initialize cucu in the current directory
782
+
783
+ Copies the `init_data` directory to the current directory
784
+ """
785
+ os.environ["CUCU_LOGGING_LEVEL"] = logging_level.upper()
786
+ logger.init_logging(logging_level.upper())
787
+
788
+ init_data_dir = Path(__file__).parent.parent / "init_data"
789
+
790
+ logger.debug(f"cucu init: copy example directory from {init_data_dir=}")
791
+ repo_dir = filepath if filepath.strip() else os.path.join(os.getcwd())
792
+
793
+ features_dir = os.path.join(repo_dir, "features")
794
+ if os.path.exists(features_dir):
795
+ answer = input("Overwrite existing files? [y/N]:")
796
+ if answer.lower() != "y":
797
+ print("Aborted!")
798
+ return
799
+
800
+ shutil.copytree(init_data_dir, repo_dir, dirs_exist_ok=True)
801
+ print("You can now start writing your tests")
802
+
803
+
768
804
  @main.command()
769
805
  @click.option(
770
806
  "-b",
@@ -46,7 +46,7 @@ def behave(
46
46
  fail_fast,
47
47
  headless,
48
48
  name,
49
- ipdb_on_failure,
49
+ debug_on_failure,
50
50
  junit,
51
51
  results,
52
52
  secrets,
@@ -81,8 +81,8 @@ def behave(
81
81
  key, value = variable.split("=")
82
82
  os.environ[key] = value
83
83
 
84
- if ipdb_on_failure:
85
- os.environ["CUCU_IPDB_ON_FAILURE"] = "true"
84
+ if debug_on_failure:
85
+ os.environ["CUCU_DEBUG_ON_FAILURE"] = "true"
86
86
 
87
87
  os.environ["CUCU_RESULTS_DIR"] = results
88
88
  os.environ["CUCU_JUNIT_DIR"] = junit
@@ -47,6 +47,10 @@ def load_cucu_steps(filepath=None):
47
47
  stdout = stdout.getvalue()
48
48
  stderr = stderr.getvalue()
49
49
 
50
+ if stdout.startswith("USING RUNNER:"):
51
+ # remove the first line of the output so that linter won't error out trying to parse it as a step
52
+ stdout = "\n".join(stdout.split("\n")[1:])
53
+
50
54
  if stdout.startswith("ParserError"):
51
55
  print(stdout)
52
56
  raise RuntimeError(
@@ -270,11 +270,11 @@ def after_step(ctx, step):
270
270
  ctx.step_index += 1
271
271
  CONFIG["__STEP_SCREENSHOT_COUNT"] = 0
272
272
 
273
- if CONFIG.bool("CUCU_IPDB_ON_FAILURE") and step.status == "failed":
273
+ if CONFIG.bool("CUCU_DEBUG_ON_FAILURE") and step.status == "failed":
274
274
  ctx._runner.stop_capture()
275
- import ipdb
275
+ import pdb
276
276
 
277
- ipdb.post_mortem(step.exc_traceback)
277
+ pdb.post_mortem(step.exc_traceback)
278
278
 
279
279
  CONFIG["__CUCU_BEFORE_THIS_SCENARIO_HOOKS"] = []
280
280
 
@@ -171,6 +171,10 @@ class CucuFormatter(Formatter):
171
171
  text = self.colorize(
172
172
  f"{indent}{prefix}{keyword} {step.name}\n", "cyan"
173
173
  )
174
+ else:
175
+ text = self.colorize(
176
+ f"{indent}{prefix}{keyword} {step.name}\n", "yellow"
177
+ )
174
178
 
175
179
  if self.monochrome:
176
180
  self.stream.write(f"{text}")
@@ -0,0 +1,5 @@
1
+ # Cucu temp files
2
+ .monitor.png
3
+ report/
4
+ results/
5
+ # /cucurc.yml # TODO: Uncomment this rule as the file should be a local only config file
@@ -0,0 +1,63 @@
1
+ <!-- your project readme here -->
2
+
3
+ # Development
4
+ ## E2E tests
5
+ Use [cucu](https://pypi.org/project/cucu/) to run e2e-tests with the following:
6
+ 1. make sure you're in the **repo root**
7
+ 2. install the --dev dependecies
8
+ ```sh
9
+ uv sync --dev
10
+ ```
11
+ 3. activate it
12
+ ```sh
13
+ source .venv/bin/activate
14
+ ```
15
+ 4. run scenario
16
+ ```sh
17
+ cucu run features
18
+ ```
19
+
20
+ ### Other helpful commands
21
+
22
+ - Show all steps
23
+ ```sh
24
+ cucu steps
25
+ ```
26
+ - Run scenario by tag
27
+ ```sh
28
+ cucu run features --tag my_tag
29
+ ```
30
+ - Run scenario by line number
31
+ ```sh
32
+ cucu run features/example.feature:8
33
+ ```
34
+ - Generate an html report
35
+ ```sh
36
+ cucu report
37
+ ```
38
+ - Run scenarios and generate report
39
+ ```sh
40
+ cucu run features -g
41
+ ```
42
+ - Lint your feature files!
43
+ _see `/features/lint_rules` for custom rules_
44
+ ```sh
45
+ cucu lint
46
+ ```
47
+
48
+ ### Tagging Tests
49
+
50
+ > [!Note] This is just an example of how use tags
51
+
52
+ 1. Tags are very important as they provide:
53
+
54
+ - Critical metadata for reporting and tracking
55
+ - Control where it runs in CI
56
+ - Filtering on what tests should run
57
+
58
+ 2. They can be at the **Feature** file level or at the **Scenario** level.
59
+
60
+ 3. Here's a list of some notable tags
61
+ | Tag | Gist | Example |
62
+ | --------- | ----------------------------------------------------------------------------------------------- | --------- |
63
+ | @sid-#### | **[Required]** The scenario (i.e. test case) id (numbers only) that is used to track and record | @sid-1234 |
@@ -0,0 +1,10 @@
1
+ # Don't check in this file! (I mean you could, but you probably don't want to)
2
+
3
+ # The config heirarchy starts with ~/.cucurc.yml, then this file, and down the folder tree.
4
+ # Use this file for local configuration per user
5
+
6
+ # This is just an example, normally you could have it as environment variables or pass it in the command line
7
+ MY_SECRET_USERNAME: "Bob"
8
+ MY_SECRET_PASSWORD: "123456"
9
+
10
+ SOME_OTHER_SECRET: "another secret"
@@ -0,0 +1,27 @@
1
+ <html>
2
+ <head>
3
+ <title>Some Example</title>
4
+ <script>
5
+ function update() {
6
+ document.querySelector("#my_status").textContent = "Welcome " + document.querySelector("#my_name").value + " !";
7
+ document.querySelector("#my_name").value = "";
8
+ document.querySelector("#my_key").value = "";
9
+ }
10
+ </script>
11
+ </head>
12
+ <body>
13
+
14
+ <h1>Some Example</h1>
15
+ <div id="my_status"></div>
16
+ <br/>
17
+
18
+ <div style="background: aliceblue;">Fake login box
19
+ <br/>
20
+ <label>username:</label><input id="my_name" type="text"></input>
21
+ <br/>
22
+ <label>The password here but use aria label to find</label><input aria-label="password" id="my_key" type="password"></input>
23
+ <br/>
24
+ <button onclick="update();">Login</button>
25
+ </div>
26
+ </body>
27
+ </html>
@@ -0,0 +1,9 @@
1
+ # Checkin this file for the repo configuration
2
+
3
+ # CUCU_SECRETS is a comma-separated list of the names of the secrets (not the values)
4
+ CUCU_SECRETS: "MY_SECRET_PASSWORD,SOME_OTHER_SECRET"
5
+
6
+ CUCU_BROWSER_WINDOW_HEIGHT: 1080
7
+ CUCU_BROWSER_WINDOW_WIDTH: 1920
8
+
9
+ CUCU_BROKEN_IMAGES_PAGE_CHECK: false