test_select.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from selenium.webdriver import Keys
  2. from nicegui import ui
  3. from .screen import Screen
  4. def test_select(screen: Screen):
  5. ui.select(['A', 'B', 'C'], value='A')
  6. screen.open('/')
  7. screen.should_contain('A')
  8. screen.should_not_contain('B')
  9. screen.should_not_contain('C')
  10. screen.click('A') # open the dropdown
  11. screen.click('B') # close the dropdown
  12. screen.wait(0.5)
  13. screen.should_not_contain('A')
  14. screen.should_contain('B')
  15. screen.should_not_contain('C')
  16. def test_select_with_input(screen: Screen):
  17. ui.select(['A', 'AB', 'XYZ'], with_input=True)
  18. screen.open('/')
  19. screen.find_by_tag('input').click()
  20. screen.should_contain('XYZ')
  21. screen.find_by_tag('input').send_keys('A')
  22. screen.wait(0.5)
  23. screen.should_contain('A')
  24. screen.should_contain('AB')
  25. screen.should_not_contain('XYZ')
  26. screen.find_by_tag('input').send_keys('ABC' + Keys.ENTER)
  27. screen.find_by_tag('input').click()
  28. screen.should_not_contain('ABC')
  29. def test_replace_select(screen: Screen):
  30. with ui.row() as container:
  31. ui.select(['A'], value='A')
  32. def replace():
  33. container.clear()
  34. with container:
  35. ui.select(['B'], value='B')
  36. ui.button('Replace', on_click=replace)
  37. screen.open('/')
  38. screen.should_contain('A')
  39. screen.click('Replace')
  40. screen.should_contain('B')
  41. screen.should_not_contain('A')
  42. def test_multi_select(screen: Screen):
  43. s = ui.select(['Alice', 'Bob', 'Carol'], value='Alice', multiple=True).props('use-chips')
  44. ui.label().bind_text_from(s, 'value', backward=str)
  45. screen.open('/')
  46. screen.should_contain("['Alice']")
  47. screen.click('Alice')
  48. screen.click('Bob')
  49. screen.should_contain("['Alice', 'Bob']")
  50. screen.click('cancel') # remove icon
  51. screen.should_contain("['Bob']")
  52. def test_changing_options(screen: Screen):
  53. s = ui.select([10, 20, 30], value=10)
  54. ui.label().bind_text_from(s, 'value', lambda v: f'value = {v}')
  55. ui.button('reverse', on_click=lambda: (s.options.reverse(), s.update()))
  56. ui.button('clear', on_click=lambda: (s.options.clear(), s.update()))
  57. screen.open('/')
  58. screen.click('reverse')
  59. screen.should_contain('value = 10')
  60. screen.click('clear')
  61. screen.should_contain('value = None')
  62. def test_set_options(screen: Screen):
  63. s = ui.select([1, 2, 3], value=1)
  64. ui.button('Set new options', on_click=lambda: s.set_options([4, 5, 6], value=4))
  65. screen.open('/')
  66. screen.click('Set new options')
  67. screen.click('4')
  68. screen.should_contain('5')
  69. screen.should_contain('6')
  70. def test_add_new_values(screen: Screen):
  71. ui.select(options=['1', '2', '3'], new_value_mode='add-unique')
  72. screen.open('/')
  73. screen.find_by_tag('input').send_keys('123' + Keys.TAB)
  74. screen.wait(0.5)
  75. screen.find_by_tag('input').click()
  76. screen.should_contain('123')
  77. def test_add_new_values_with_options_dict(screen: Screen):
  78. ui.select(options={1: '1', 2: '2', 3: '3'}, new_value_mode='add-unique')
  79. screen.open('/')
  80. screen.find_by_tag('input').send_keys('123' + Keys.TAB)
  81. screen.wait(0.5)
  82. screen.find_by_tag('input').click()
  83. screen.should_contain('123')
  84. def test_add_new_values_with_multiple(screen: Screen):
  85. s = ui.select(options=['1', '2', '3'], value='1', multiple=True, new_value_mode='add-unique').props('use-chips')
  86. ui.label().bind_text_from(s, 'value', backward=str)
  87. screen.open('/')
  88. screen.should_contain("['1']")
  89. screen.find_by_tag('input').send_keys('123' + Keys.ENTER)
  90. screen.wait(0.5)
  91. screen.find_by_tag('input').click()
  92. screen.should_contain('123')
  93. screen.click('123')
  94. screen.should_contain("['1', '123']")