codemie-test-harness 0.1.167__py3-none-any.whl → 0.1.169__py3-none-any.whl

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 codemie-test-harness might be problematic. Click here for more details.

Files changed (36) hide show
  1. codemie_test_harness/tests/test_data/assistant_test_data.py +197 -0
  2. codemie_test_harness/tests/ui/assistants/__init__.py +0 -0
  3. codemie_test_harness/tests/ui/assistants/test_create_assistant.py +408 -0
  4. codemie_test_harness/tests/ui/conftest.py +23 -3
  5. codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py +3 -4
  6. codemie_test_harness/tests/ui/pageobject/assistants/create_assistant_page.py +689 -0
  7. codemie_test_harness/tests/ui/pageobject/assistants/generate_with_ai_modal.py +367 -0
  8. codemie_test_harness/tests/ui/pageobject/base_page.py +24 -24
  9. codemie_test_harness/tests/ui/pageobject/components/__init__.py +2 -2
  10. codemie_test_harness/tests/ui/pageobject/components/execution_history_row.py +3 -3
  11. codemie_test_harness/tests/ui/pageobject/components/{header.py → menu.py} +57 -111
  12. codemie_test_harness/tests/ui/pageobject/components/pop_up.py +2 -2
  13. codemie_test_harness/tests/ui/pageobject/components/workflow_card.py +7 -10
  14. codemie_test_harness/tests/ui/pageobject/components/workflow_execution_history_item.py +9 -9
  15. codemie_test_harness/tests/ui/pageobject/components/workflow_execution_state.py +1 -1
  16. codemie_test_harness/tests/ui/pageobject/components/workflow_sidebar.py +16 -16
  17. codemie_test_harness/tests/ui/pageobject/workflows/base_workflow_form_page.py +32 -65
  18. codemie_test_harness/tests/ui/pageobject/workflows/create_workflow_page.py +4 -4
  19. codemie_test_harness/tests/ui/pageobject/workflows/edit_workflow_page.py +6 -4
  20. codemie_test_harness/tests/ui/pageobject/workflows/workflow_details_page.py +32 -61
  21. codemie_test_harness/tests/ui/pageobject/workflows/workflow_executions_page.py +17 -23
  22. codemie_test_harness/tests/ui/pageobject/workflows/workflow_template_details.py +5 -11
  23. codemie_test_harness/tests/ui/pageobject/workflows/workflow_templates_page.py +5 -2
  24. codemie_test_harness/tests/ui/pageobject/workflows/workflows_page.py +3 -5
  25. codemie_test_harness/tests/ui/pytest.ini +18 -0
  26. codemie_test_harness/tests/ui/workflows/__init__.py +0 -0
  27. codemie_test_harness/tests/ui/{test_create_workflow.py → workflows/test_create_workflow.py} +12 -33
  28. codemie_test_harness/tests/ui/{test_edit_workflow.py → workflows/test_edit_workflow.py} +14 -34
  29. codemie_test_harness/tests/ui/{test_workflow_details.py → workflows/test_workflow_details.py} +11 -11
  30. codemie_test_harness/tests/ui/{test_workflow_executions_page.py → workflows/test_workflow_executions_page.py} +0 -2
  31. codemie_test_harness/tests/ui/{test_workflow_templates.py → workflows/test_workflow_templates.py} +0 -2
  32. codemie_test_harness/tests/ui/{test_workflows.py → workflows/test_workflows.py} +8 -6
  33. {codemie_test_harness-0.1.167.dist-info → codemie_test_harness-0.1.169.dist-info}/METADATA +2 -2
  34. {codemie_test_harness-0.1.167.dist-info → codemie_test_harness-0.1.169.dist-info}/RECORD +36 -29
  35. {codemie_test_harness-0.1.167.dist-info → codemie_test_harness-0.1.169.dist-info}/WHEEL +0 -0
  36. {codemie_test_harness-0.1.167.dist-info → codemie_test_harness-0.1.169.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  """
2
- Header component page object for the main navigation header.
2
+ Menu component page object for the main navigation menu.
3
3
  Contains methods for interacting with navigation links, logo, and user profile.
4
4
  """
5
5
 
@@ -7,23 +7,23 @@ from reportportal_client import step
7
7
  from playwright.sync_api import expect
8
8
 
9
9
 
10
- class Header:
11
- """Header component with property-based element locators."""
10
+ class Menu:
11
+ """Menu component with property-based element locators."""
12
12
 
13
13
  def __init__(self, page):
14
14
  self.page = page
15
15
 
16
- # Header elements using @property decorator
16
+ # Menu elements using @property decorator
17
17
  @property
18
- def header_container(self):
19
- """Main header container."""
18
+ def menu_container(self):
19
+ """Main menu container."""
20
20
  return self.page.locator("//body//header")
21
21
 
22
22
  @property
23
23
  def logo_link(self):
24
24
  """Logo link element."""
25
- return self.header_container.locator(
26
- '//a[@href="#/assistants"][span[text()="EPAM AI/Run"]]'
25
+ return self.menu_container.locator(
26
+ "a.h-12.flex.grow.gap-4.items-center.relative.select-none.text-nowrap.cursor-pointer.group"
27
27
  )
28
28
 
29
29
  @property
@@ -33,13 +33,13 @@ class Header:
33
33
 
34
34
  @property
35
35
  def logo_tooltip(self):
36
- """Logo tooltip text."""
37
- return self.page.locator('span:has-text("EPAM AI/Run")')
36
+ """Logo tooltip text whn menu is expanded."""
37
+ return self.page.locator('a:has-text("EPAM AI/RUN"):has-text("CodeMie")')
38
38
 
39
39
  @property
40
40
  def top_nav(self):
41
41
  """Top navigation container."""
42
- return self.header_container.locator('nav[aria-label="top-nav-links"]')
42
+ return self.menu_container.locator('nav[aria-label="top-nav-links"]')
43
43
 
44
44
  @property
45
45
  def chats_link(self):
@@ -64,7 +64,7 @@ class Header:
64
64
  @property
65
65
  def secondary_nav(self):
66
66
  """Secondary navigation container."""
67
- return self.header_container.locator('nav[aria-label="secondary-nav-links"]')
67
+ return self.menu_container.locator('nav[aria-label="secondary-nav-links"]')
68
68
 
69
69
  @property
70
70
  def integrations_link(self):
@@ -79,73 +79,51 @@ class Header:
79
79
  @property
80
80
  def bottom_nav(self):
81
81
  """Bottom navigation container."""
82
- return self.header_container.locator('nav[aria-label="bottom-nav-links"]')
82
+ return self.menu_container.locator('nav[aria-label="bottom-nav-links"]')
83
83
 
84
84
  @property
85
- def help_link(self):
86
- """Help navigation link."""
87
- return self.bottom_nav.locator('a[href="#/help"]')
88
-
89
- @property
90
- def user_profile_container(self):
91
- """User profile container."""
92
- return self.header_container.locator("//span[text()='User Profile']/..")
93
-
94
- @property
95
- def user_profile_button(self):
96
- """User profile button."""
97
- return self.user_profile_container.locator("button")
98
-
99
- @property
100
- def user_avatar(self):
101
- """User avatar image."""
102
- return self.user_profile_button.locator('img[alt="User profile"]')
103
-
104
- @property
105
- def user_profile_tooltip(self):
106
- """User profile tooltip text."""
107
- return self.page.locator('span:has-text("User Profile")')
108
-
109
- # Navigation link tooltips
110
- @property
111
- def chats_tooltip(self):
112
- """Chats tooltip text."""
113
- return self.page.locator('span:has-text("Chats")')
85
+ def faq_assistant_link(self):
86
+ """FAQ assistant navigation link."""
87
+ return self.bottom_nav.locator(
88
+ 'a[href="#/assistants/codemie-onboarding/start"]'
89
+ )
114
90
 
115
91
  @property
116
- def assistants_tooltip(self):
117
- """Assistants tooltip text."""
118
- return self.page.locator('span:has-text("Assistants")')
92
+ def prompt_assistant_link(self):
93
+ """Prompt Engineer assistant navigation link."""
94
+ return self.bottom_nav.locator('a[href="#/assistants/prompt-engineer/start"]')
119
95
 
120
96
  @property
121
- def workflows_tooltip(self):
122
- """Workflows tooltip text."""
123
- return self.page.locator('span:has-text("Workflows")')
97
+ def switch_new_codemie(self):
98
+ """Switch to new CodeMie."""
99
+ return self.menu_container.locator(".switch")
124
100
 
125
101
  @property
126
- def applications_tooltip(self):
127
- """Applications tooltip text."""
128
- return self.page.locator('span:has-text("Applications")')
102
+ def hide_expand_menu_button(self):
103
+ """Hide/Expand menu button."""
104
+ return self.menu_container.locator(
105
+ 'button[type="button"].rounded-lg.flex.items-center'
106
+ )
129
107
 
130
108
  @property
131
- def integrations_tooltip(self):
132
- """Integrations tooltip text."""
133
- return self.page.locator('span:has-text("Integrations")')
109
+ def help_link(self):
110
+ """Help navigation link."""
111
+ return self.bottom_nav.locator('a[href="#/help"]')
134
112
 
135
113
  @property
136
- def data_sources_tooltip(self):
137
- """Data Sources tooltip text."""
138
- return self.page.locator('span:has-text("Data Sources")')
114
+ def user_profile_button(self):
115
+ """User profile button."""
116
+ return self.menu_container.locator("button.cursor-pointer.group")
139
117
 
140
118
  @property
141
- def help_tooltip(self):
142
- """Help tooltip text."""
143
- return self.page.locator('span:has-text("Help")')
119
+ def user_avatar(self):
120
+ """User avatar image."""
121
+ return self.user_profile_button.locator("img")
144
122
 
145
123
  # Action methods
146
124
  @step
147
125
  def click_logo(self):
148
- """Click on the EPAM AI/Run logo to navigate to assistants page."""
126
+ """Click on the EPAM AI/Run logo to navigate to new chat."""
149
127
  self.logo_link.click()
150
128
  return self
151
129
 
@@ -197,46 +175,6 @@ class Header:
197
175
  self.user_profile_button.click()
198
176
  return self
199
177
 
200
- @step
201
- def hover_over_navigation_item(self, navigation_item: str):
202
- """
203
- Hover over a navigation item to display its tooltip.
204
-
205
- Args:
206
- navigation_item (str): The navigation item to hover over
207
- ('chats', 'assistants', 'workflows', 'applications',
208
- 'integrations', 'data_sources', 'help', 'logo', 'user_profile')
209
- """
210
- navigation_items = {
211
- "chats": self.chats_link,
212
- "assistants": self.assistants_link,
213
- "workflows": self.workflows_link,
214
- "applications": self.applications_link,
215
- "integrations": self.integrations_link,
216
- "data_sources": self.data_sources_link,
217
- "help": self.help_link,
218
- "logo": self.logo_link,
219
- "user_profile": self.user_profile_button,
220
- }
221
-
222
- if navigation_item in navigation_items:
223
- navigation_items[navigation_item].hover()
224
- else:
225
- raise ValueError(f"Unknown navigation item: {navigation_item}")
226
- return self
227
-
228
- @step
229
- def wait_for_tooltip_to_appear(self, tooltip_text: str):
230
- """
231
- Wait for a specific tooltip to appear.
232
-
233
- Args:
234
- tooltip_text (str): The text of the tooltip to wait for
235
- """
236
- tooltip = self.page.locator(f'span:has-text("{tooltip_text}")')
237
- tooltip.wait_for(state="visible")
238
- return self
239
-
240
178
  # Utility methods
241
179
  @step
242
180
  def get_active_navigation_item(self):
@@ -244,7 +182,7 @@ class Header:
244
182
  Get the currently active navigation item.
245
183
  Returns the href of the active navigation link.
246
184
  """
247
- active_link = self.header_container.locator("a.bg-new-panel-secondary")
185
+ active_link = self.menu_container.locator("a.bg-new-panel-secondary")
248
186
  if active_link.is_visible():
249
187
  return active_link.get_attribute("href")
250
188
  return None
@@ -257,8 +195,8 @@ class Header:
257
195
  # Verification methods
258
196
  @step
259
197
  def should_be_visible(self):
260
- """Verify that the header is visible."""
261
- expect(self.header_container).to_be_visible()
198
+ """Verify that the menu is visible."""
199
+ expect(self.menu_container).to_be_visible()
262
200
  return self
263
201
 
264
202
  @step
@@ -293,12 +231,12 @@ class Header:
293
231
  Verify that all main navigation elements are present and visible.
294
232
  """
295
233
  navigation_structure = {
296
- "header": self.header_container,
234
+ "menu": self.menu_container,
297
235
  "logo": self.logo_link,
298
236
  "top_nav": self.top_nav,
299
237
  "secondary_nav": self.secondary_nav,
300
238
  "bottom_nav": self.bottom_nav,
301
- "user_profile": self.user_profile_container,
239
+ "user_profile": self.user_profile_button,
302
240
  "chats_link": self.chats_link,
303
241
  "assistants_link": self.assistants_link,
304
242
  "workflows_link": self.workflows_link,
@@ -306,6 +244,10 @@ class Header:
306
244
  "integrations_link": self.integrations_link,
307
245
  "data_sources_link": self.data_sources_link,
308
246
  "help_link": self.help_link,
247
+ "faq_assistant_link": self.faq_assistant_link,
248
+ "prompt_assistant_link": self.prompt_assistant_link,
249
+ "switch_to_new_codemie": self.switch_new_codemie,
250
+ "hide_expand_menu": self.hide_expand_menu_button,
309
251
  }
310
252
 
311
253
  for element_name, element in navigation_structure.items():
@@ -322,9 +264,9 @@ class Header:
322
264
 
323
265
  # Legacy methods for backward compatibility
324
266
  @step
325
- def is_header_visible(self):
326
- """Check if the header is visible on the page."""
327
- return self.header_container.is_visible()
267
+ def is_menu_visible(self):
268
+ """Check if the menu is visible on the page."""
269
+ return self.menu_container.is_visible()
328
270
 
329
271
  @step
330
272
  def is_logo_visible(self):
@@ -359,12 +301,12 @@ class Header:
359
301
  dict: A dictionary with the visibility status of each navigation section
360
302
  """
361
303
  return {
362
- "header_visible": self.header_container.is_visible(),
304
+ "menu_visible": self.menu_container.is_visible(),
363
305
  "logo_visible": self.logo_link.is_visible(),
364
306
  "top_nav_visible": self.top_nav.is_visible(),
365
307
  "secondary_nav_visible": self.secondary_nav.is_visible(),
366
308
  "bottom_nav_visible": self.bottom_nav.is_visible(),
367
- "user_profile_visible": self.user_profile_container.is_visible(),
309
+ "user_profile_visible": self.user_profile_button.is_visible(),
368
310
  "chats_link_visible": self.chats_link.is_visible(),
369
311
  "assistants_link_visible": self.assistants_link.is_visible(),
370
312
  "workflows_link_visible": self.workflows_link.is_visible(),
@@ -372,4 +314,8 @@ class Header:
372
314
  "integrations_link_visible": self.integrations_link.is_visible(),
373
315
  "data_sources_link_visible": self.data_sources_link.is_visible(),
374
316
  "help_link_visible": self.help_link.is_visible(),
317
+ "faq_assistant_link_visible": self.faq_assistant_link.is_visible(),
318
+ "prompt_assistant_link_visible": self.prompt_assistant_link.is_visible(),
319
+ "switch_to_new_codemie_visible": self.switch_new_codemie.is_visible(),
320
+ "hide_expand_menu_visible": self.hide_expand_menu_button.is_visible(),
375
321
  }
@@ -15,8 +15,8 @@ class PopUp:
15
15
  return self.page.locator(".popup")
16
16
 
17
17
  @property
18
- def header(self):
19
- """Pop-up header text."""
18
+ def menu(self):
19
+ """Pop-up menu text."""
20
20
  return self.pop_up.locator(".popup-header")
21
21
 
22
22
  @property
@@ -26,17 +26,17 @@ class WorkflowCard:
26
26
  @property
27
27
  def title(self):
28
28
  """Workflow title element."""
29
- return self.card.locator(".flex-row .flex-col > div:not([class])")
29
+ return self.card.locator(".whitespace-nowrap.truncate.font-semibold")
30
30
 
31
31
  @property
32
32
  def author(self):
33
33
  """Workflow author element."""
34
- return self.card.locator(".text-sm.text-text-gray-300")
34
+ return self.card.locator(".text-xs.text-text-gray-300")
35
35
 
36
36
  @property
37
37
  def description(self):
38
38
  """Workflow description element."""
39
- return self.card.locator("p.text-text-gray-100")
39
+ return self.card.locator(".flex-row p.text-xs")
40
40
 
41
41
  @property
42
42
  def description_tooltip(self):
@@ -48,7 +48,7 @@ class WorkflowCard:
48
48
  @property
49
49
  def run_button(self):
50
50
  """Run workflow button."""
51
- return self.card.locator("button.button.secondary")
51
+ return self.card.locator("button.gradient.medium")
52
52
 
53
53
  @property
54
54
  def menu_button(self):
@@ -137,20 +137,17 @@ class WorkflowCard:
137
137
  @step
138
138
  def should_have_title(self, expected_title: str):
139
139
  """Verify the workflow has the expected title."""
140
- expect(self.title).to_have_text(expected_title)
141
- return self
140
+ return self.get_title() == expected_title
142
141
 
143
142
  @step
144
143
  def should_have_author(self, expected_author: str):
145
144
  """Verify the workflow has the expected author."""
146
- expect(self.author).to_contain_text(expected_author)
147
- return self
145
+ return self.get_author() == expected_author
148
146
 
149
147
  @step
150
148
  def should_have_description(self, expected_description: str):
151
149
  """Verify the workflow has the expected description."""
152
- expect(self.description).to_have_text(expected_description)
153
- return self
150
+ return self.get_description() == expected_description
154
151
 
155
152
  @step
156
153
  def should_be_shared_with_project(self):
@@ -25,12 +25,12 @@ class WorkflowExecutionHistoryItem:
25
25
  @property
26
26
  def status_badge(self):
27
27
  """Status badge (Succeeded/Failed/Running)."""
28
- return self.item.locator(".flex.flex-row.items-center.gap-1")
28
+ return self.item.locator(".flex.flex-row.items-center.border")
29
29
 
30
30
  @property
31
31
  def status_dot(self):
32
32
  """Status indicator dot."""
33
- return self.status_badge.locator(".rounded-full.w-2.h-2")
33
+ return self.status_badge.locator(".rounded-full.inline-block")
34
34
 
35
35
  @property
36
36
  def timestamp(self):
@@ -38,8 +38,8 @@ class WorkflowExecutionHistoryItem:
38
38
  return self.item.locator(".text-text-tertiary.text-xs span")
39
39
 
40
40
  @property
41
- def execution_id(self):
42
- """Execution ID text element."""
41
+ def execution_body(self):
42
+ """Execution body text element."""
43
43
  return self.item.locator(
44
44
  ".truncate.overflow-hidden.whitespace-nowrap.min-w-0.text-sm"
45
45
  )
@@ -47,7 +47,7 @@ class WorkflowExecutionHistoryItem:
47
47
  @property
48
48
  def menu_button(self):
49
49
  """Three dots menu button."""
50
- return self.item.locator('button:has(svg path[fill="#A1A1A1"])')
50
+ return self.item.locator("button.tertiary.medium.m-1")
51
51
 
52
52
  # Utility methods
53
53
  @step
@@ -58,7 +58,7 @@ class WorkflowExecutionHistoryItem:
58
58
  @step
59
59
  def get_execution_id_text(self) -> str:
60
60
  """Get execution ID text."""
61
- return self.execution_id.text_content().strip()
61
+ return self.execution_body.text_content().strip()
62
62
 
63
63
  @step
64
64
  def get_timestamp_text(self) -> str:
@@ -162,13 +162,13 @@ class WorkflowExecutionHistoryItem:
162
162
  @step
163
163
  def should_have_execution_id(self, expected_id: str):
164
164
  """Verify the execution ID."""
165
- expect(self.execution_id).to_have_text(expected_id)
165
+ expect(self.execution_body).to_have_text(expected_id)
166
166
  return self
167
167
 
168
168
  @step
169
169
  def should_have_execution_id_pattern(self, pattern: str):
170
170
  """Verify the execution ID matches a pattern (regex)."""
171
- expect(self.execution_id).to_match(pattern)
171
+ expect(self.execution_body).to_match(pattern)
172
172
  return self
173
173
 
174
174
  @step
@@ -213,7 +213,7 @@ class WorkflowExecutionHistoryItem:
213
213
  """Verify all main elements are visible."""
214
214
  expect(self.container).to_be_visible()
215
215
  expect(self.status_badge).to_be_visible()
216
- expect(self.execution_id).to_be_visible()
216
+ expect(self.execution_body).to_be_visible()
217
217
  expect(self.timestamp).to_be_visible()
218
218
  expect(self.menu_button).to_be_visible()
219
219
  return self
@@ -97,7 +97,7 @@ class WorkflowExecutionState:
97
97
  @property
98
98
  def expanded_content(self):
99
99
  """Expanded content container (when state is expanded)."""
100
- return self.state.locator("div.wrapper")
100
+ return self.state.locator("div.markdown")
101
101
 
102
102
  @property
103
103
  def expanded_message(self):
@@ -14,7 +14,7 @@ class WorkflowSidebar:
14
14
  """
15
15
  self.page = page
16
16
 
17
- # Main container and header
17
+ # Main container and sidebar
18
18
  @property
19
19
  def sidebar_container(self):
20
20
  """Main sidebar container."""
@@ -57,8 +57,8 @@ class WorkflowSidebar:
57
57
 
58
58
  # Filters section
59
59
  @property
60
- def filters_header(self):
61
- """Filters section header."""
60
+ def filters_sidebar(self):
61
+ """Filters section sidebar."""
62
62
  return self.sidebar_container.locator('span:has-text("Filters")')
63
63
 
64
64
  @property
@@ -73,8 +73,8 @@ class WorkflowSidebar:
73
73
 
74
74
  # Project filter section
75
75
  @property
76
- def project_filter_header(self):
77
- """Project filter expandable header."""
76
+ def project_filter_sidebar(self):
77
+ """Project filter expandable sidebar."""
78
78
  return self.sidebar_container.locator('a:has-text("project")')
79
79
 
80
80
  @property
@@ -110,8 +110,8 @@ class WorkflowSidebar:
110
110
 
111
111
  # Shared filter section
112
112
  @property
113
- def shared_filter_header(self):
114
- """Shared filter expandable header."""
113
+ def shared_filter_sidebar(self):
114
+ """Shared filter expandable sidebar."""
115
115
  return self.sidebar_container.locator('a:has-text("shared")')
116
116
 
117
117
  @property
@@ -187,14 +187,14 @@ class WorkflowSidebar:
187
187
  def expand_project_filter(self):
188
188
  """Expand the project filter section."""
189
189
  if not self.is_project_filter_expanded():
190
- self.project_filter_header.click()
190
+ self.project_filter_sidebar.click()
191
191
  return self
192
192
 
193
193
  @step
194
194
  def collapse_project_filter(self):
195
195
  """Collapse the project filter section."""
196
196
  if self.is_project_filter_expanded():
197
- self.project_filter_header.click()
197
+ self.project_filter_sidebar.click()
198
198
  return self
199
199
 
200
200
  @step
@@ -222,14 +222,14 @@ class WorkflowSidebar:
222
222
  def expand_shared_filter(self):
223
223
  """Expand the shared filter section."""
224
224
  if not self.is_shared_filter_expanded():
225
- self.shared_filter_header.click()
225
+ self.shared_filter_sidebar.click()
226
226
  return self
227
227
 
228
228
  @step
229
229
  def collapse_shared_filter(self):
230
230
  """Collapse the shared filter section."""
231
231
  if self.is_shared_filter_expanded():
232
- self.shared_filter_header.click()
232
+ self.shared_filter_sidebar.click()
233
233
  return self
234
234
 
235
235
  @step
@@ -342,27 +342,27 @@ class WorkflowSidebar:
342
342
  @step
343
343
  def should_have_filters_section(self):
344
344
  """Verify that the filters section is visible."""
345
- expect(self.filters_header).to_be_visible()
345
+ expect(self.filters_sidebar).to_be_visible()
346
346
  return self
347
347
 
348
348
  @step
349
349
  def should_have_project_filter_collapsed(self):
350
350
  """Verify that the project filter is collapsed."""
351
- expect(self.project_filter_header).to_be_visible()
351
+ expect(self.project_filter_sidebar).to_be_visible()
352
352
  expect(self.project_multiselect).not_to_be_visible()
353
353
  return self
354
354
 
355
355
  @step
356
356
  def should_have_project_filter_expanded(self):
357
357
  """Verify that the project filter is expanded."""
358
- expect(self.project_filter_header).to_be_visible()
358
+ expect(self.project_filter_sidebar).to_be_visible()
359
359
  expect(self.project_multiselect).to_be_visible()
360
360
  return self
361
361
 
362
362
  @step
363
363
  def should_have_shared_filter_collapsed(self):
364
364
  """Verify that the shared filter is collapsed."""
365
- expect(self.shared_filter_header).to_be_visible()
365
+ expect(self.shared_filter_sidebar).to_be_visible()
366
366
  expect(self.with_project_radio_group).not_to_be_visible()
367
367
  expect(self.not_shared_radio_group).not_to_be_visible()
368
368
  return self
@@ -370,7 +370,7 @@ class WorkflowSidebar:
370
370
  @step
371
371
  def should_have_shared_filter_expanded(self):
372
372
  """Verify that the shared filter is expanded."""
373
- expect(self.shared_filter_header).to_be_visible()
373
+ expect(self.shared_filter_sidebar).to_be_visible()
374
374
  expect(self.with_project_radio_group).to_be_visible()
375
375
  expect(self.not_shared_radio_group).to_be_visible()
376
376
  return self