pytorch-lightning
73 строки · 2.6 Кб
1import contextlib2from time import sleep3
4import pytest5from lightning.app.testing.testing import run_app_in_cloud6from lightning.app.utilities.imports import _is_playwright_available7
8from integrations_app.flagship import _PATH_INTEGRATIONS_DIR9
10if _is_playwright_available():11import playwright12from playwright.sync_api import Page, expect13
14
15# TODO: when this function is moved to the app itself we can just import it, so to keep better aligned
16def validate_app_functionalities(app_page: "Page") -> None:17"""Validate the page after app starts.18
19this is direct copy-paste of validation living in the app repository:
20https://github.com/Lightning-AI/LAI-Flashy-App/blob/main/tests/test_app_gallery.py#L205
21
22app_page: The UI page of the app to be validated.
23
24"""
25while True:26with contextlib.suppress(playwright._impl._api_types.Error, playwright._impl._api_types.TimeoutError):27app_page.reload()28sleep(5)29app_label = app_page.frame_locator("iframe").locator("text=Choose your AI task")30app_label.wait_for(timeout=30 * 1000)31break32
33input_field = app_page.frame_locator("iframe").locator('input:below(:text("Data URL"))').first34input_field.wait_for(timeout=1000)35input_field.type("https://pl-flash-data.s3.amazonaws.com/hymenoptera_data.zip")36sleep(1)37upload_btn = app_page.frame_locator("iframe").locator('button:has-text("Upload")')38upload_btn.wait_for(timeout=1000)39upload_btn.click()40
41sleep(10)42
43train_folder_dropdown = app_page.frame_locator("iframe").locator("#mui-2")44train_folder_dropdown.click()45
46train_folder = app_page.frame_locator("iframe").locator('text="hymenoptera_data/train"')47train_folder.scroll_into_view_if_needed()48train_folder.click()49
50val_folder_dropdown = app_page.frame_locator("iframe").locator("#mui-3")51val_folder_dropdown.click()52
53val_folder = app_page.frame_locator("iframe").locator('text="hymenoptera_data/val"')54val_folder.scroll_into_view_if_needed()55val_folder.click()56
57train_btn = app_page.frame_locator("iframe").locator('button:has-text("Start training!")')58train_btn.click()59
60# Sometimes the results don't show until we refresh the page61sleep(10)62
63app_page.reload()64
65app_page.frame_locator("iframe").locator('button:has-text("RESULTS")').click()66runs = app_page.frame_locator("iframe").locator("table tbody tr")67expect(runs).to_have_count(1, timeout=120000)68
69
70@pytest.mark.cloud()71def test_app_cloud() -> None:72with run_app_in_cloud(_PATH_INTEGRATIONS_DIR) as (_, view_page, _, _):73validate_app_functionalities(view_page)74