1+ import logging
2+ import time
3+ import pytest
14from config .constants import *
25from pages .homePage import HomePage
36
7+ logger = logging .getLogger (__name__ )
48
5- # def test_chatbot_responds_with_upcoming_meeting_schedule_date(login_logout):
6- # page = login_logout
7- # home_page = HomePage(page)
8- # # validate page title
9- # assert homepage_title == page.locator(home_page.HOME_PAGE_TITLE).text_content()
10- # # select a client
11- # home_page.select_a_client(client_name)
12- # # validate selected client name
13- # assert client_name == page.locator(home_page.SELECTED_CLIENT_NAME_LABEL).text_content()
14- # # ask a question
15- # home_page.enter_a_question(next_meeting_question)
16- # # click send button
17- # home_page.click_send_button()
18- # # Validate response status code
19- # home_page.validate_response_status()
20- # # validate the upcoming meeting date-time in both side panel and response
21- # home_page.validate_next_meeting_date_time()
9+ def validate_home_and_client (home ):
10+ assert homepage_title == home .page .locator (home .HOME_PAGE_TITLE ).text_content ()
11+ home .select_a_client (client_name )
12+ assert client_name == home .page .locator (home .SELECTED_CLIENT_NAME_LABEL ).text_content ()
2213
23- def test_save_chat_confirmation_popup (login_logout ):
24- page = login_logout
25- home_page = HomePage (page )
26- # validate page title
27- assert homepage_title == page .locator (home_page .HOME_PAGE_TITLE ).text_content ()
28- # select a client
29- home_page .select_a_client (client_name )
30- # validate selected client name
31- assert client_name == page .locator (home_page .SELECTED_CLIENT_NAME_LABEL ).text_content ()
32- # clear the chat if any
33- home_page .click_clear_chat_icon ()
34- # ask a question
35- home_page .enter_a_question (golden_path_question1 )
36- # click send button
37- home_page .click_send_button ()
38- # Validate response status code
39- home_page .validate_response_status ()
40- #click on the plus button
41- home_page .click_on_save_chat_plus_icon ()
42- assert page .locator (home_page .SAVE_CHAT_CONFIRMATION_POPUPTEXT ).is_visible ()
14+ def save_chat_confirmation_popup (home ):
15+ home .click_clear_chat_icon ()
16+ home .enter_a_question (golden_path_question1 )
17+ home .click_send_button ()
18+ home .validate_response_status ()
19+ home .click_on_save_chat_plus_icon ()
20+ assert home .page .locator (home .SAVE_CHAT_CONFIRMATION_POPUPTEXT ).is_visible ()
4321
44- def test_delete_chat_history_during_response (login_logout ):
45- page = login_logout
46- home_page = HomePage (page )
47- # validate page title
48- assert homepage_title == page .locator (home_page .HOME_PAGE_TITLE ).text_content ()
49- # select a client
50- home_page .select_a_client (client_name )
51- # validate selected client name
52- assert client_name == page .locator (home_page .SELECTED_CLIENT_NAME_LABEL ).text_content ()
53- # ask a question
54- home_page .enter_a_question (golden_path_question1 )
55- # click send button
56- home_page .click_send_button ()
57- #click on the plus button
58- home_page .click_on_save_chat_plus_icon ()
59- assert page .locator (home_page .SAVE_CHAT_CONFIRMATION_POPUPTEXT ).is_visible ()
60- #click on show chat history button
61- home_page .click_on_show_chat_history_button ()
62- #click on saved chat history
63- home_page .click_on_saved_chat ()
64- #ask the question
65- home_page .enter_a_question (golden_path_question1 )
66- #click on click_send_button_for_chat_history_response
67- home_page .click_send_button_for_chat_history_response ()
68- # validate the delete icon disabled
69- assert page .locator (home_page .SHOW_CHAT_HISTORY_DELETE_ICON ).is_disabled ()
70- # click on hide chat history button
71- home_page .click_hide_chat_history_button ()
72- # clear the chat
73- home_page .click_clear_chat_icon ()
74-
75- def test_golden_path_demo_script (login_logout ):
22+ def delete_chat_history_during_response (home ):
23+ home .enter_a_question (golden_path_question1 )
24+ home .click_send_button ()
25+ home .click_on_save_chat_plus_icon ()
26+ assert home .page .locator (home .SAVE_CHAT_CONFIRMATION_POPUPTEXT ).is_visible ()
27+ home .click_on_show_chat_history_button ()
28+ home .click_on_saved_chat ()
29+ home .enter_a_question (golden_path_question1 )
30+ home .click_send_button_for_chat_history_response ()
31+ assert home .page .locator (home .SHOW_CHAT_HISTORY_DELETE_ICON ).is_disabled ()
32+ home .click_hide_chat_history_button ()
33+ home .click_clear_chat_icon ()
34+
35+ def golden_path_full_demo (home ):
36+ _validate_golden_path_response (home , golden_path_question1 )
37+ _validate_golden_path_response (home , golden_path_question2 )
38+ _validate_golden_path_response (home , golden_path_question3 )
39+ _validate_golden_path_response (home , golden_path_question4 )
40+ _validate_golden_path_response (home , golden_path_question5 )
41+ _validate_client_info_absence (home , golden_path_question7 )
42+
43+ # Define test steps and actions
44+ test_cases = [
45+ ("Validate homepage and select client" , validate_home_and_client ),
46+ ("Save chat confirmation popup" , save_chat_confirmation_popup ),
47+ ("Delete chat history during response" , delete_chat_history_during_response ),
48+ ("Golden path full demo" , golden_path_full_demo ),
49+ ]
50+
51+ # Create readable test IDs
52+ test_ids = [f"{ i + 1 :02d} . { desc } " for i , (desc , _ ) in enumerate (test_cases )]
53+
54+ def _validate_golden_path_response (home , question ):
55+ home .enter_a_question (question )
56+ home .click_send_button ()
57+ home .validate_response_status ()
58+ response_text = home .page .locator (home .ANSWER_TEXT )
59+ assert response_text .nth (response_text .count () - 1 ).text_content () != invalid_response , \
60+ f"Incorrect response for question: { question } "
61+
62+ def _validate_client_info_absence (home , question ):
63+ home .enter_a_question (question )
64+ home .click_send_button ()
65+ home .validate_response_status ()
66+ response_text = home .page .locator (home .ANSWER_TEXT ).nth (home .page .locator (home .ANSWER_TEXT ).count () - 1 ).text_content ().lower ()
67+ assert "arun sharma" not in response_text , "Other client information appeared in response."
68+ assert client_name .lower () not in response_text , f"Client name '{ client_name } ' should not be in response for question: { question } "
69+
70+ @pytest .mark .parametrize ("desc, action" , test_cases , ids = test_ids )
71+ def test_home_page_cases (login_logout , desc , action , request ):
72+ """
73+ Parametrized test for home page scenarios including chat flows and validations.
74+ """
7675 page = login_logout
7776 home_page = HomePage (page )
78- # validate page title
79- assert homepage_title == page .locator (home_page .HOME_PAGE_TITLE ).text_content ()
80- # select a client
81- home_page .select_a_client (client_name )
82- # validate selected client name
83- assert client_name == page .locator (home_page .SELECTED_CLIENT_NAME_LABEL ).text_content ()
84- # ask a question
85- home_page .enter_a_question (golden_path_question1 )
86- # click send button
87- home_page .click_send_button ()
88- # Validate response status code
89- home_page .validate_response_status ()
90- response_text = page .locator (home_page .ANSWER_TEXT )
91- # validate the response
92- assert response_text .nth (response_text .count ()- 1 ).text_content () != invalid_response ,"Incorrect response for question: " + golden_path_question1
93- # ask a question
94- home_page .enter_a_question (golden_path_question2 )
95- # click send button
96- home_page .click_send_button ()
97- # Validate response status code
98- home_page .validate_response_status ()
99- # validate the response
100- assert response_text .nth (response_text .count () - 1 ).text_content () != invalid_response ,"Incorrect response for question: " + golden_path_question2
101- # ask a question
102- home_page .enter_a_question (golden_path_question3 )
103- # click send button
104- home_page .click_send_button ()
105- # Validate response status code
106- home_page .validate_response_status ()
107- # validate the response
108- assert response_text .nth (response_text .count () - 1 ).text_content () != invalid_response ,"Incorrect response for question: " + golden_path_question3
109- # ask a question
110- home_page .enter_a_question (golden_path_question4 )
111- # click send button
112- home_page .click_send_button ()
113- # Validate response status code
114- home_page .validate_response_status ()
115- # validate the response
116- assert response_text .nth (response_text .count () - 1 ).text_content () != invalid_response ,"Incorrect response for question: " + golden_path_question4
117- # ask a question
118- home_page .enter_a_question (golden_path_question5 )
119- # click send button
120- home_page .click_send_button ()
121- # Validate response status code
122- home_page .validate_response_status ()
123- # validate the response
124- assert response_text .nth (response_text .count () - 1 ).text_content () != invalid_response ,"Incorrect response for question: " + golden_path_question5
125- # # ask a question
126- # home_page.enter_a_question(golden_path_question6)
127- # # click send button
128- # home_page.click_send_button()
129- # # Validate response status code
130- # home_page.validate_response_status()
131- # # validate the response
132- # assert response_text.nth(response_text.count() - 1).text_content() != invalid_response,"Incorrect response for question: "+golden_path_question6
133- # ask a question
134- home_page .enter_a_question (golden_path_question7 )
135- # click send button
136- home_page .click_send_button ()
137- # Validate response status code
138- home_page .validate_response_status ()
139- # validate the response
140- assert (response_text .nth (response_text .count () - 1 ).text_content ().lower ()).find ("arun sharma" ) == - 1 ,"Other client information in response for client: " + client_name
141- assert (response_text .nth (response_text .count () - 1 ).text_content ().lower ()).find (client_name ) == - 1 ,"Response is generated for selected client " + client_name + " even client name is different in question: " + golden_path_question7
77+ home_page .page = page # Required for locator access in helper functions
78+ logger .info (f"Running step: { desc } " )
79+
80+ start = time .time ()
81+ action (home_page )
82+ end = time .time ()
83+
84+ duration = end - start
85+ logger .info (f"Execution Time for '{ desc } ': { duration :.2f} s" )
86+ request .node ._report_sections .append (("call" , "log" , f"Execution time: { duration :.2f} s" ))
0 commit comments