from nicegui import ui
from nicegui.testing import Screen

from ..windows import python_window
from . import doc


@doc.part('Screen Fixture')
def screen_fixture():
    ui.markdown('''
        The `screen` fixture starts a real (headless) browser to interact with your application.
        This is only necessary if you have browser-specific behavior to test.
        NiceGUI itself is thoroughly tested with this fixture to ensure each component works as expected.
        So only use it if you have to.
    ''').classes('bold-links arrow-links')

    with python_window(classes='w-[600px]', title='example'):
        ui.markdown('''
            ```python
            from selenium.webdriver.common.keys import Keys

            screen.open('/')
            screen.type(Keys.TAB) # to focus on the first input
            screen.type('user1')
            screen.type(Keys.TAB) # to focus the second input
            screen.type('pass1')
            screen.click('Log in')
            screen.should_contain('Hello user1!')
            screen.click('logout')
            screen.should_contain('Log in')
            ```
        ''')


@doc.part('Web driver')
def web_driver():
    ui.markdown('''
        The `screen` fixture uses Selenium under the hood.
        Currently it is only tested with the Chrome driver.
        To automatically use it for the tests we suggest to add the option `--driver Chrome` to your `pytest.ini`:
    ''').classes('bold-links arrow-links')

    with python_window(classes='w-[600px] h-42', title='pytest.ini'):
        ui.markdown('''
            ```ini
            [pytest]
            asyncio_mode = auto
            addopts = "--driver Chrome"
            ```
        ''')


doc.reference(Screen)