12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from datetime import datetime
- import pytest
- from nicegui import ui
- from nicegui.events import ValueChangeEventArguments
- from .screen import Screen
- def test_executing_javascript_on_button_press(screen: Screen):
- async def set_title() -> None:
- await ui.run_javascript('document.title = "A New Title"')
- ui.button('change title', on_click=set_title)
- screen.open('/')
- assert screen.selenium.title == 'NiceGUI'
- screen.click('change title')
- assert screen.selenium.title == 'A New Title'
- assert screen.selenium.title != 'NiceGUI'
- def test_executing_javascript_on_value_change(screen: Screen):
- async def ready():
- await ui.run_javascript('document.title = "Initial Page Title"')
- @ui.page('/', on_page_ready=ready)
- def main_page():
- async def set_title(e: ValueChangeEventArguments) -> None:
- await ui.run_javascript(f'document.title = "{e.value}"')
- ui.radio(['Page Title A', 'Page Title B'], on_change=set_title)
- screen.open('/')
- screen.wait(0.3)
- assert screen.selenium.title == 'Initial Page Title'
- screen.click('Title B')
- screen.wait(0.3)
- assert screen.selenium.title == 'Page Title B'
- screen.click('Title A')
- screen.wait(0.3)
- assert screen.selenium.title == 'Page Title A'
- def test_executing_javascript_on_async_page(screen: Screen):
- @ui.page('/')
- async def page():
- ui.label('before js')
- with pytest.raises(RuntimeError):
- await ui.run_javascript('document.title = "A New Title"')
- ui.label('after js')
- screen.open('/')
- assert screen.selenium.title == 'NiceGUI'
- screen.should_contain('before js')
- screen.should_contain('after js')
- def test_retrieving_content_from_javascript(screen: Screen):
- async def compute() -> None:
- response = await ui.run_javascript('1 + 41')
- for _, answer in response.items():
- ui.label(answer)
- ui.button('compute', on_click=compute)
- screen.open('/')
- screen.click('compute')
- screen.should_contain('42')
|