1
0

test_input.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from selenium.webdriver.common.by import By
  2. from nicegui import ui
  3. from .screen import Screen
  4. def test_input(screen: Screen):
  5. ui.input('Your name', value='John Doe')
  6. screen.open('/')
  7. screen.should_contain('Your name')
  8. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Your name"]')
  9. assert element.get_attribute('type') == 'text'
  10. assert element.get_attribute('value') == 'John Doe'
  11. element.send_keys(' Jr.')
  12. assert element.get_attribute('value') == 'John Doe Jr.'
  13. def test_password(screen: Screen):
  14. ui.input('Your password', value='123456', password=True)
  15. screen.open('/')
  16. screen.should_contain('Your password')
  17. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Your password"]')
  18. assert element.get_attribute('type') == 'password'
  19. assert element.get_attribute('value') == '123456'
  20. element.send_keys('789')
  21. screen.wait(0.5)
  22. assert element.get_attribute('value') == '123456789'
  23. def test_toggle_button(screen: Screen):
  24. ui.input('Your password', value='123456', password=True, password_toggle_button=True)
  25. screen.open('/')
  26. screen.should_contain('Your password')
  27. screen.should_contain('visibility_off')
  28. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Your password"]')
  29. assert element.get_attribute('type') == 'password'
  30. assert element.get_attribute('value') == '123456'
  31. screen.click('visibility_off')
  32. screen.wait(0.5)
  33. assert element.get_attribute('type') == 'text'
  34. screen.click('visibility')
  35. screen.wait(0.5)
  36. assert element.get_attribute('type') == 'password'
  37. def test_input_validation(screen: Screen):
  38. ui.input('Name', validation={'Too short': lambda value: len(value) >= 5})
  39. screen.open('/')
  40. screen.should_contain('Name')
  41. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Name"]')
  42. element.send_keys('John')
  43. screen.should_contain('Too short')
  44. element.send_keys(' Doe')
  45. screen.wait(0.5)
  46. screen.should_not_contain('Too short')
  47. def test_input_with_multi_word_error_message(screen: Screen):
  48. input = ui.input(label='some input')
  49. ui.button('set error', on_click=lambda: input.props('error error-message="Some multi word error message"'))
  50. screen.open('/')
  51. screen.should_not_contain('Some multi word error message')
  52. screen.click('set error')
  53. screen.should_contain('Some multi word error message')