Get response via edit button
(
page: AsyncPage, req_id: str, check_client_disconnected: Callable
)
| 799 | |
| 800 | |
| 801 | async def get_response_via_edit_button( |
| 802 | page: AsyncPage, req_id: str, check_client_disconnected: Callable |
| 803 | ) -> Optional[str]: |
| 804 | """Get response via edit button""" |
| 805 | logger.info(f"[{req_id}] (Helper) Attempting to get response via edit button...") |
| 806 | last_message_container = page.locator("ms-chat-turn").last |
| 807 | edit_button = last_message_container.get_by_label("Edit") |
| 808 | finish_edit_button = last_message_container.get_by_label("Stop editing") |
| 809 | autosize_textarea_locator = last_message_container.locator("ms-autosize-textarea") |
| 810 | actual_textarea_locator = autosize_textarea_locator.locator("textarea") |
| 811 | |
| 812 | try: |
| 813 | logger.info( |
| 814 | f"[{req_id}] - Attempting to hover last message to show 'Edit' button..." |
| 815 | ) |
| 816 | try: |
| 817 | # Perform hover on message container |
| 818 | await last_message_container.hover(timeout=CLICK_TIMEOUT_MS / 2) |
| 819 | await asyncio.sleep(0.3) # Wait for hover effect |
| 820 | check_client_disconnected("Edit Response - after hover: ") |
| 821 | except (ClientDisconnectedError, asyncio.CancelledError): |
| 822 | raise |
| 823 | except Exception as hover_err: |
| 824 | logger.warning( |
| 825 | f"[{req_id}] - (get_response_via_edit_button) Hover last message failed (ignoring): {type(hover_err).__name__}" |
| 826 | ) |
| 827 | |
| 828 | logger.info(f"[{req_id}] - Locating and clicking 'Edit' button...") |
| 829 | try: |
| 830 | from playwright.async_api import expect as expect_async |
| 831 | |
| 832 | await expect_async(edit_button).to_be_visible(timeout=CLICK_TIMEOUT_MS) |
| 833 | check_client_disconnected("Edit Response - 'Edit' button visible after: ") |
| 834 | await edit_button.click(timeout=CLICK_TIMEOUT_MS) |
| 835 | logger.info(f"[{req_id}] - 'Edit' button clicked.") |
| 836 | except (ClientDisconnectedError, asyncio.CancelledError): |
| 837 | raise |
| 838 | except Exception as edit_btn_err: |
| 839 | logger.error( |
| 840 | f"[{req_id}] - 'Edit' button not visible or click failed: {edit_btn_err}" |
| 841 | ) |
| 842 | await save_error_snapshot(f"edit_response_edit_button_failed_{req_id}") |
| 843 | return None |
| 844 | |
| 845 | check_client_disconnected("Edit Response - after clicking 'Edit' button: ") |
| 846 | await asyncio.sleep(0.3) |
| 847 | check_client_disconnected( |
| 848 | "Edit Response - after delay following 'Edit' button click: " |
| 849 | ) |
| 850 | |
| 851 | logger.info(f"[{req_id}] - Getting content from textarea...") |
| 852 | response_content = None |
| 853 | textarea_failed = False |
| 854 | |
| 855 | try: |
| 856 | await expect_async(autosize_textarea_locator).to_be_visible( |
| 857 | timeout=CLICK_TIMEOUT_MS |
| 858 | ) |