103 lines
4.1 KiB
Python
103 lines
4.1 KiB
Python
import time
|
|
import pytest
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from page_objects.home_dashboard_page import HomeDashboardPage
|
|
from page_objects.profile_editor_page import ProfileEditorPage
|
|
from page_objects.settings_panel_page import SettingsPanelPage
|
|
from page_objects.danger_zone_page import DangerZonePage
|
|
|
|
@pytest.mark.regression
|
|
@pytest.mark.usefixtures("logged_in_driver")
|
|
class TestDashboard:
|
|
"""
|
|
Test suite for the Home page and its nested pages (Dashboard).
|
|
Requires user to be logged in.
|
|
"""
|
|
|
|
def test_navigation_between_pages(self, logged_in_driver):
|
|
"""
|
|
Tests that the user can successfully navigate between the Profile,
|
|
Settings, and Danger Zone pages.
|
|
"""
|
|
# Arrange
|
|
dashboard_page = HomeDashboardPage(logged_in_driver)
|
|
settings_page = SettingsPanelPage(logged_in_driver)
|
|
danger_zone_page = DangerZonePage(logged_in_driver)
|
|
profile_page = ProfileEditorPage(logged_in_driver)
|
|
|
|
# Act & Assert: Navigate back to dashborade and verify
|
|
text = dashboard_page.verify_title_is_dashboarde()
|
|
assert text == 'Test Cases' , 'error switch to dashhoard tab'
|
|
|
|
# Act & Assert: Navigate to Settings tab and verify
|
|
dashboard_page.navigate_to_settings()
|
|
text = settings_page.verify_title_is_settings()
|
|
assert text == 'Application Settings' , 'error switch to settings tab'
|
|
|
|
# Act & Assert: Danger Zone and verify
|
|
|
|
text = danger_zone_page.verify_danger_zone_exist()
|
|
assert text == 'Danger Zone' , 'no exists Danger Zone '
|
|
|
|
# Act & Assert: Navigate back to Profile and verify
|
|
dashboard_page.navigate_to_profile()
|
|
print(text)
|
|
text = profile_page.verify_title_is_profile()
|
|
assert text == 'Personal Information' , 'error switch to profile tab'
|
|
|
|
def test_profile_editor_interaction(self, logged_in_driver):
|
|
"""
|
|
Tests basic interaction with the profile editor form.
|
|
"""
|
|
# Arrange
|
|
dashboard_page = HomeDashboardPage(logged_in_driver)
|
|
profile_page = ProfileEditorPage(logged_in_driver)
|
|
|
|
# Act: Ensure we are on the profile page and update username
|
|
dashboard_page.navigate_to_profile()
|
|
new_username = "Automation Tester"
|
|
profile_page.set_username(new_username)
|
|
# self.profile_page.click_save_changes() # This action is commented out as it might not have a real backend effect
|
|
|
|
# Assert: Check if the value was updated in the input field
|
|
updated_value = profile_page.find_element(profile_page.USERNAME_INPUT).get_attribute("value")
|
|
assert updated_value == new_username
|
|
|
|
def test_danger_zone_dialog_flow(self, logged_in_driver):
|
|
"""
|
|
Tests that the 'Delete Account' button shows a confirmation dialog
|
|
and that the cancel button closes it.
|
|
"""
|
|
# Arrange
|
|
danger_zone_page = DangerZonePage(logged_in_driver)
|
|
|
|
# Act: Click the delete button
|
|
danger_zone_page.click_delete_account()
|
|
|
|
# # Assert: The confirmation dialog is visible
|
|
# assert danger_zone_page.verify_confirmation_dialog_exist(), \
|
|
# "Confirmation dialog should be visible after clicking 'Delete Account'."
|
|
|
|
# Act: Click the cancel button
|
|
time.sleep(1)
|
|
danger_zone_page.click_cancel_in_dialog()
|
|
text = danger_zone_page.verify_confirmation_dialog_exist()
|
|
# Assert: The dialog is no longer visible
|
|
assert text == 'Are you absolutely sure?', \
|
|
"Confirmation dialog should not be visible after clicking 'Cancel'."
|
|
|
|
# Act: Click the delete button
|
|
time.sleep(1)
|
|
danger_zone_page.click_delete_account()
|
|
danger_zone_page.set_dialog_input()
|
|
danger_zone_page.click_confirm_in_dialog()
|
|
# 等待跳转到登录页
|
|
WebDriverWait(logged_in_driver, 5).until(
|
|
lambda driver: '/login' in driver.current_url
|
|
)
|
|
|
|
# 断言当前 URL
|
|
current_url = logged_in_driver.current_url
|
|
assert current_url.endswith('/login'), f"Expected to be on /login, but got {current_url}"
|
|
|