test_events.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import asyncio
  2. from selenium.webdriver.common.by import By
  3. from nicegui import ui
  4. from nicegui.events import ClickEventArguments
  5. from .screen import Screen
  6. def click_sync_no_args():
  7. ui.label('click_sync_no_args')
  8. def click_sync_with_args(_: ClickEventArguments):
  9. ui.label('click_sync_with_args')
  10. async def click_async_no_args():
  11. await asyncio.sleep(0.1)
  12. ui.label('click_async_no_args')
  13. async def click_async_with_args(_: ClickEventArguments):
  14. await asyncio.sleep(0.1)
  15. ui.label('click_async_with_args')
  16. def test_click_events(screen: Screen):
  17. ui.button('click_sync_no_args', on_click=click_sync_no_args)
  18. ui.button('click_sync_with_args', on_click=click_sync_with_args)
  19. ui.button('click_async_no_args', on_click=click_async_no_args)
  20. ui.button('click_async_with_args', on_click=click_async_with_args)
  21. screen.open('/')
  22. screen.click('click_sync_no_args')
  23. screen.click('click_sync_with_args')
  24. screen.click('click_async_no_args')
  25. screen.click('click_async_with_args')
  26. screen.wait(0.5)
  27. screen.should_contain('click_sync_no_args')
  28. screen.should_contain('click_sync_with_args')
  29. screen.should_contain('click_async_no_args')
  30. screen.should_contain('click_async_with_args')
  31. def test_generic_events(screen: Screen):
  32. ui.label('click_sync_no_args').on('click', click_sync_no_args)
  33. ui.label('click_sync_with_args').on('click', click_sync_with_args)
  34. ui.label('click_async_no_args').on('click', click_async_no_args)
  35. ui.label('click_async_with_args').on('click', click_async_with_args)
  36. screen.open('/')
  37. screen.click('click_sync_no_args')
  38. screen.click('click_sync_with_args')
  39. screen.click('click_async_no_args')
  40. screen.click('click_async_with_args')
  41. screen.wait(0.5)
  42. screen.should_contain('click_sync_no_args')
  43. screen.should_contain('click_sync_with_args')
  44. screen.should_contain('click_async_no_args')
  45. screen.should_contain('click_async_with_args')
  46. def test_event_with_update_before_await(screen: Screen):
  47. @ui.page('/')
  48. def page():
  49. async def update():
  50. ui.label('1')
  51. await asyncio.sleep(1.0)
  52. ui.label('2')
  53. ui.button('update', on_click=update)
  54. screen.open('/')
  55. screen.click('update')
  56. screen.wait_for('1')
  57. screen.should_not_contain('2')
  58. screen.wait_for('2')
  59. def test_event_modifiers(screen: Screen):
  60. events = []
  61. ui.input('A').on('keydown', lambda _: events.append('A'))
  62. ui.input('B').on('keydown.x', lambda _: events.append('B'))
  63. ui.input('C').on('keydown.once', lambda _: events.append('C'))
  64. ui.input('D').on('keydown.shift.x', lambda _: events.append('D'))
  65. screen.open('/')
  66. screen.selenium.find_element(By.XPATH, '//*[@aria-label="A"]').send_keys('x')
  67. screen.selenium.find_element(By.XPATH, '//*[@aria-label="B"]').send_keys('xy')
  68. screen.selenium.find_element(By.XPATH, '//*[@aria-label="C"]').send_keys('xx')
  69. screen.selenium.find_element(By.XPATH, '//*[@aria-label="D"]').send_keys('Xx')
  70. assert events == ['A', 'B', 'C', 'D']