HomeDashboard/.venv/lib/python3.12/site-packages/nicegui/testing/user_navigate.py
2026-01-03 14:54:18 +01:00

44 lines
1.6 KiB
Python

from __future__ import annotations
from typing import TYPE_CHECKING, Any, Callable
from nicegui import Client, background_tasks
from nicegui.element import Element
from nicegui.functions.navigate import Navigate
if TYPE_CHECKING:
from .user import User
class UserNavigate(Navigate):
def __init__(self, user: User) -> None:
super().__init__()
self.user = user
def to(self, target: Callable[..., Any] | str | Element, new_tab: bool = False) -> None:
if isinstance(target, Element):
# NOTE navigation to an element does not do anything in the user simulation (the whole content is always visible)
return
path = Client.page_routes[target] if callable(target) else target
background_tasks.create(self.user.open(path), name=f'navigate to {path}')
def back(self) -> None:
current = self.user.back_history.pop()
self.user.forward_history.append(current)
target = self.user.back_history.pop()
background_tasks.create(self.user.open(target, clear_forward_history=False), name=f'navigate back to {target}')
def forward(self) -> None:
if not self.user.forward_history:
return
target = self.user.forward_history[0]
del self.user.forward_history[0]
background_tasks.create(self.user.open(target, clear_forward_history=False),
name=f'navigate forward to {target}')
def reload(self) -> None:
target = self.user.back_history.pop()
background_tasks.create(self.user.open(target, clear_forward_history=False),
name=f'navigate reload to {target}')