test_page_scopes.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # Copyright 2023 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. import inspect
  12. import logging
  13. from importlib import util
  14. import pytest
  15. from taipy.gui import Gui
  16. if util.find_spec("playwright"):
  17. from playwright._impl._page import Page
  18. from .assets.page1 import page as page1
  19. from .assets.page2 import page as page2
  20. from .assets.page3 import page as page3
  21. @pytest.mark.timeout(300)
  22. @pytest.mark.teste2e
  23. def test_page_scopes(page: "Page", gui: Gui, helpers):
  24. if frame := inspect.currentframe():
  25. gui._set_frame(frame)
  26. def on_change(state, var, val, module):
  27. if var == "x" and "page3" in module:
  28. state.y = val * 10
  29. gui.add_page("page1", page1)
  30. gui.add_page("page2", page2)
  31. gui.add_page("page3", page3)
  32. helpers.run_e2e(gui)
  33. page.goto("./page1")
  34. page.expect_websocket()
  35. page.wait_for_selector("#x1")
  36. assert page.query_selector("#x1").inner_text() == "10"
  37. assert page.query_selector("#x2").inner_text() == "20"
  38. assert page.query_selector("#y1").inner_text() == "20"
  39. assert page.query_selector("#y2").inner_text() == "40"
  40. page.goto("./page2")
  41. page.expect_websocket()
  42. page.wait_for_selector("#x1")
  43. assert page.query_selector("#x1").inner_text() == "20"
  44. assert page.query_selector("#x2").inner_text() == "40"
  45. assert page.query_selector("#y1").inner_text() == "10"
  46. assert page.query_selector("#y2").inner_text() == "20"
  47. page.goto("./page3")
  48. page.expect_websocket()
  49. page.wait_for_selector("#x1")
  50. assert page.query_selector("#x1").inner_text() == "50"
  51. assert page.query_selector("#x2").inner_text() == "100"
  52. page.goto("./page1")
  53. page.expect_websocket()
  54. page.wait_for_selector("#x1")
  55. page.fill("#xinput", "15")
  56. function_evaluated = True
  57. try:
  58. page.wait_for_function("document.querySelector('#y2').innerText !== '40'")
  59. function_evaluated = True
  60. except Exception as e:
  61. function_evaluated = False
  62. logging.getLogger().debug(f"Function evaluation timeout.\n{e}")
  63. if not function_evaluated:
  64. return
  65. assert page.query_selector("#x1").inner_text() == "15"
  66. assert page.query_selector("#x2").inner_text() == "30"
  67. assert page.query_selector("#y1").inner_text() == "45"
  68. assert page.query_selector("#y2").inner_text() == "90"
  69. page.goto("./page2")
  70. page.expect_websocket()
  71. page.wait_for_selector("#x1")
  72. assert page.query_selector("#x1").inner_text() == "45"
  73. assert page.query_selector("#x2").inner_text() == "90"
  74. assert page.query_selector("#y1").inner_text() == "15"
  75. assert page.query_selector("#y2").inner_text() == "30"
  76. page.fill("#xinput", "37")
  77. function_evaluated = True
  78. try:
  79. page.wait_for_function("document.querySelector('#y2').innerText !== '30'")
  80. function_evaluated = True
  81. except Exception as e:
  82. function_evaluated = False
  83. logging.getLogger().debug(f"Function evaluation timeout.\n{e}")
  84. if not function_evaluated:
  85. return
  86. assert page.query_selector("#x1").inner_text() == "37"
  87. assert page.query_selector("#x2").inner_text() == "74"
  88. assert page.query_selector("#y1").inner_text() == "185"
  89. assert page.query_selector("#y2").inner_text() == "370"
  90. page.goto("./page1")
  91. page.expect_websocket()
  92. page.wait_for_selector("#x1")
  93. assert page.query_selector("#x1").inner_text() == "185"
  94. assert page.query_selector("#x2").inner_text() == "370"
  95. assert page.query_selector("#y1").inner_text() == "37"
  96. assert page.query_selector("#y2").inner_text() == "74"
  97. page.goto("./page3")
  98. page.expect_websocket()
  99. page.wait_for_selector("#x1")
  100. assert page.query_selector("#x1").inner_text() == "50"
  101. assert page.query_selector("#x2").inner_text() == "100"