cucu 1.2.0__tar.gz → 1.2.1__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 (94) hide show
  1. {cucu-1.2.0 → cucu-1.2.1}/CHANGELOG.md +3 -0
  2. {cucu-1.2.0 → cucu-1.2.1}/PKG-INFO +1 -1
  3. {cucu-1.2.0 → cucu-1.2.1}/pyproject.toml +2 -2
  4. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/browser/selenium.py +0 -2
  5. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/environment.py +17 -2
  6. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/utils.py +13 -0
  7. {cucu-1.2.0 → cucu-1.2.1}/.gitignore +0 -0
  8. {cucu-1.2.0 → cucu-1.2.1}/LICENSE +0 -0
  9. {cucu-1.2.0 → cucu-1.2.1}/README.md +0 -0
  10. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/__init__.py +0 -0
  11. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/ansi_parser.py +0 -0
  12. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/behave_tweaks.py +0 -0
  13. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/browser/__init__.py +0 -0
  14. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/browser/core.py +0 -0
  15. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/browser/frames.py +0 -0
  16. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/browser/selenium_tweaks.py +0 -0
  17. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/cli/__init__.py +0 -0
  18. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/cli/core.py +0 -0
  19. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/cli/run.py +0 -0
  20. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/cli/steps.py +0 -0
  21. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/cli/thread_dumper.py +0 -0
  22. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/config.py +0 -0
  23. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/edgedriver_autoinstaller/README.md +0 -0
  24. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/edgedriver_autoinstaller/__init__.py +0 -0
  25. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/edgedriver_autoinstaller/utils.py +0 -0
  26. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/external/jquery/jquery-3.5.1.min.js +0 -0
  27. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/formatter/__init__.py +0 -0
  28. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/formatter/cucu.py +0 -0
  29. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/formatter/json.py +0 -0
  30. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/formatter/junit.py +0 -0
  31. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/fuzzy/__init__.py +0 -0
  32. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/fuzzy/core.py +0 -0
  33. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/fuzzy/fuzzy.js +0 -0
  34. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/helpers.py +0 -0
  35. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/hooks.py +0 -0
  36. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/.gitignore +0 -0
  37. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/README.md +0 -0
  38. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/cucurc.yml +0 -0
  39. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/data/www/example.html +0 -0
  40. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/cucurc.yml +0 -0
  41. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/environment.py +0 -0
  42. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/example.feature +0 -0
  43. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/lint_rules/sid.yaml +0 -0
  44. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/steps/__init__.py +0 -0
  45. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/init_data/features/steps/my_steps.py +0 -0
  46. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/language_server/__init__.py +0 -0
  47. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/language_server/core.py +0 -0
  48. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/lint/__init__.py +0 -0
  49. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/lint/linter.py +0 -0
  50. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/lint/rules/format.yaml +0 -0
  51. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/logger.py +0 -0
  52. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/matcher/__init__.py +0 -0
  53. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/matcher/core.py +0 -0
  54. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/page_checks.py +0 -0
  55. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/__init__.py +0 -0
  56. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/bootstrap.min.css +0 -0
  57. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/bootstrap.min.js +0 -0
  58. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/dataTables.bootstrap.min.css +0 -0
  59. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/dataTables.bootstrap.min.js +0 -0
  60. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/jquery-3.5.1.min.js +0 -0
  61. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/jquery.dataTables.min.js +0 -0
  62. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/external/popper.min.js +0 -0
  63. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/favicon.png +0 -0
  64. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/html.py +0 -0
  65. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/templates/feature.html +0 -0
  66. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/templates/flat.html +0 -0
  67. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/templates/index.html +0 -0
  68. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/templates/layout.html +0 -0
  69. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/reporter/templates/scenario.html +0 -0
  70. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/__init__.py +0 -0
  71. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/base_steps.py +0 -0
  72. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/browser_steps.py +0 -0
  73. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/button_steps.py +0 -0
  74. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/checkbox_steps.py +0 -0
  75. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/command_steps.py +0 -0
  76. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/draggable_steps.py +0 -0
  77. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/dropdown_steps.py +0 -0
  78. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/file_input_steps.py +0 -0
  79. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/filesystem_steps.py +0 -0
  80. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/flow_control_steps.py +0 -0
  81. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/image_steps.py +0 -0
  82. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/input_steps.py +0 -0
  83. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/link_steps.py +0 -0
  84. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/menuitem_steps.py +0 -0
  85. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/platform_steps.py +0 -0
  86. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/radio_steps.py +0 -0
  87. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/section_steps.py +0 -0
  88. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/step_utils.py +0 -0
  89. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/tab_steps.py +0 -0
  90. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/table_steps.py +0 -0
  91. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/tables.js +0 -0
  92. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/text_steps.py +0 -0
  93. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/variable_steps.py +0 -0
  94. {cucu-1.2.0 → cucu-1.2.1}/src/cucu/steps/webserver_steps.py +0 -0
@@ -5,6 +5,9 @@ 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.2.1
9
+ - Add - add tab information to html report and cucu debug console log
10
+
8
11
  ## 1.2.0
9
12
  - Add - levels 2-4 to section step
10
13
  - Change - rename comment step to section step
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cucu
3
- Version: 1.2.0
3
+ Version: 1.2.1
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/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cucu"
3
- version = "1.2.0"
3
+ version = "1.2.1"
4
4
  description = "Easy BDD web testing"
5
5
  readme = "README.md"
6
6
  license = { text = "The Clear BSD License" }
@@ -82,7 +82,7 @@ exclude = [
82
82
  [tool.uv]
83
83
  dev-dependencies = [
84
84
  "pre-commit>=3.8.0",
85
- "pytest~=8.3.5",
85
+ "pytest~=8.4.0",
86
86
  "ruff>=0.6.4",
87
87
  ]
88
88
 
@@ -215,7 +215,6 @@ class Selenium(Browser):
215
215
 
216
216
  if window_handle_index == len(window_handles) - 1:
217
217
  raise RuntimeError("no next browser tab available")
218
-
219
218
  self.driver.switch_to.window(window_handles[window_handle_index + 1])
220
219
 
221
220
  def switch_to_previous_tab(self):
@@ -225,7 +224,6 @@ class Selenium(Browser):
225
224
 
226
225
  if window_handle_index == 0:
227
226
  raise RuntimeError("no previous browser tab available")
228
-
229
227
  self.driver.switch_to.window(window_handles[window_handle_index - 1])
230
228
 
231
229
  def back(self):
@@ -10,7 +10,7 @@ from functools import partial
10
10
  from cucu import config, init_scenario_hook_variables, logger
11
11
  from cucu.config import CONFIG
12
12
  from cucu.page_checks import init_page_checks
13
- from cucu.utils import ellipsize_filename, take_screenshot
13
+ from cucu.utils import ellipsize_filename, get_tab_information, take_screenshot
14
14
 
15
15
  CONFIG.define(
16
16
  "FEATURE_RESULTS_DIR",
@@ -24,7 +24,7 @@ CONFIG.define(
24
24
  )
25
25
  CONFIG.define(
26
26
  "SCENARIO_DOWNLOADS_DIR",
27
- "the browser downloads directory for the currently " "executing scenario",
27
+ "the browser downloads directory for the currently executing scenario",
28
28
  default=None,
29
29
  )
30
30
 
@@ -264,6 +264,21 @@ def after_step(ctx, step):
264
264
  if ctx.browser is not None and ctx.current_step.has_substeps is False:
265
265
  take_screenshot(ctx, step.name, label=f"After {step.name}")
266
266
 
267
+ tab_info = get_tab_information(ctx)
268
+ total_tabs = tab_info["window_count"]
269
+ current_tab = tab_info["current_index"] + 1
270
+ title = tab_info["current_title"]
271
+ url = tab_info["current_url"]
272
+ log_message = (
273
+ f"\ntab({current_tab} of {total_tabs}): {title}\nurl: {url}\n"
274
+ )
275
+ logger.debug(log_message)
276
+
277
+ # Add tab info to step.stdout so it shows up in the HTML report
278
+ step.stdout += (
279
+ f"\ntab({current_tab} of {total_tabs}): {title}\nurl: {url}\n"
280
+ )
281
+
267
282
  # if the step has substeps from using `run_steps` then we already moved
268
283
  # the step index in the run_steps method and shouldn't do it here
269
284
  if not step.has_substeps:
@@ -271,3 +271,16 @@ def take_screenshot(ctx, step_name, label="", element=None):
271
271
  shutil.copyfile(filepath, CONFIG["CUCU_MONITOR_PNG"])
272
272
 
273
273
  CONFIG["__STEP_SCREENSHOT_COUNT"] += 1
274
+
275
+
276
+ def get_tab_information(ctx):
277
+ driver = ctx.browser.driver
278
+ window_handles = driver.window_handles
279
+ current_window = driver.current_window_handle
280
+ window_handle_index = window_handles.index(current_window)
281
+ return {
282
+ "window_count": len(window_handles),
283
+ "current_index": window_handle_index,
284
+ "current_title": driver.title,
285
+ "current_url": driver.current_url,
286
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes