1
0

test_javascript.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from datetime import datetime
  2. import pytest
  3. from nicegui import ui
  4. from nicegui.events import ValueChangeEventArguments
  5. from .screen import Screen
  6. def test_executing_javascript_on_button_press(screen: Screen):
  7. async def set_title() -> None:
  8. await ui.run_javascript('document.title = "A New Title"')
  9. ui.button('change title', on_click=set_title)
  10. screen.open('/')
  11. assert screen.selenium.title == 'NiceGUI'
  12. screen.click('change title')
  13. assert screen.selenium.title == 'A New Title'
  14. assert screen.selenium.title != 'NiceGUI'
  15. def test_executing_javascript_on_value_change(screen: Screen):
  16. async def ready():
  17. await ui.run_javascript('document.title = "Initial Page Title"')
  18. @ui.page('/', on_page_ready=ready)
  19. def main_page():
  20. async def set_title(e: ValueChangeEventArguments) -> None:
  21. await ui.run_javascript(f'document.title = "{e.value}"')
  22. ui.radio(['Page Title A', 'Page Title B'], on_change=set_title)
  23. screen.open('/')
  24. screen.wait(0.3)
  25. assert screen.selenium.title == 'Initial Page Title'
  26. screen.click('Title B')
  27. screen.wait(0.3)
  28. assert screen.selenium.title == 'Page Title B'
  29. screen.click('Title A')
  30. screen.wait(0.3)
  31. assert screen.selenium.title == 'Page Title A'
  32. def test_executing_javascript_on_async_page(screen: Screen):
  33. @ui.page('/')
  34. async def page():
  35. ui.label('before js')
  36. with pytest.raises(RuntimeError):
  37. await ui.run_javascript('document.title = "A New Title"')
  38. ui.label('after js')
  39. screen.open('/')
  40. assert screen.selenium.title == 'NiceGUI'
  41. screen.should_contain('before js')
  42. screen.should_contain('after js')
  43. def test_retrieving_content_from_javascript(screen: Screen):
  44. async def compute() -> None:
  45. response = await ui.run_javascript('1 + 41')
  46. for _, answer in response.items():
  47. ui.label(answer)
  48. ui.button('compute', on_click=compute)
  49. screen.open('/')
  50. screen.click('compute')
  51. screen.should_contain('42')