test_javascript.py 1002 B

12345678910111213141516171819202122232425262728293031
  1. from datetime import datetime
  2. from nicegui import ui
  3. from .screen import Screen
  4. def test_executing_javascript(screen: Screen):
  5. async def set_title() -> None:
  6. await ui.run_javascript('document.title = "A New Title"')
  7. ui.button('change title', on_click=set_title)
  8. screen.open('/')
  9. assert screen.selenium.title == 'NiceGUI'
  10. screen.click('change title')
  11. assert screen.selenium.title == 'A New Title'
  12. assert screen.selenium.title != 'NiceGUI'
  13. def test_retrieving_content_from_javascript(screen: Screen):
  14. async def write_time() -> None:
  15. response = await ui.await_javascript('Date.now()')
  16. ui.label(f'Browser time: {response}')
  17. ui.button('write time', on_click=write_time)
  18. screen.open('/')
  19. screen.click('write time')
  20. label = screen.find('Browser time').text
  21. js_time = datetime.fromtimestamp(int(label.split(': ')[1]) / 1000)
  22. assert abs((datetime.now() - js_time).total_seconds()) < 1, f'{js_time} should be close to now'