Spaces:
Sleeping
Sleeping
| import os | |
| import pytest | |
| import time | |
| import gymnasium as gym | |
| # register gym environments | |
| import browsergym.miniwob | |
| from browsergym.miniwob.all import ( | |
| ClickButtonTask, | |
| ClickOptionTask, | |
| DrawLineTask, | |
| LoginUserTask, | |
| ) | |
| __SLOW_MO = 1000 if "DISPLAY_BROWSER" in os.environ else None | |
| __HEADLESS = False if "DISPLAY_BROWSER" in os.environ else True | |
| TASKS = [ClickButtonTask, ClickOptionTask, DrawLineTask, LoginUserTask] | |
| def test_validate_teardown(task_cls): | |
| pw = browsergym.core._get_global_playwright() | |
| browser = pw.chromium.launch(headless=__HEADLESS, slow_mo=__SLOW_MO) | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42) | |
| task.setup(page=page) | |
| reward, done, msg, info = task.validate(page, []) | |
| assert done is False | |
| task.teardown() | |
| context.close() | |
| browser.close() | |
| def test_episode_max_time(task_cls): | |
| pw = browsergym.core._get_global_playwright() | |
| browser = pw.chromium.launch(headless=__HEADLESS, slow_mo=__SLOW_MO) | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42, episode_max_time=0.2) | |
| task.setup(page=page) | |
| time.sleep(0.5) | |
| reward, done, msg, info = task.validate(page, []) | |
| assert done is True | |
| assert reward == 0 | |
| task.teardown() | |
| context.close() | |
| browser.close() | |
| def test_remove_human_display(task_cls): | |
| pw = browsergym.core._get_global_playwright() | |
| browser = pw.chromium.launch(headless=__HEADLESS, slow_mo=__SLOW_MO) | |
| # remove display | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42, remove_human_display=True) | |
| task.setup(page=page) | |
| for element_id in ["reward-display", "click-canvas", "sync-task-cover"]: | |
| element_in_dom = page.evaluate(f"!!document.getElementById('{element_id}')") | |
| assert not element_in_dom | |
| assert page.evaluate(f"document.getElementById('query').innerHTML") == "" | |
| for element_id in ["wrap", "area"]: | |
| element_in_dom = page.evaluate(f"!!document.getElementById('{element_id}')") | |
| assert element_in_dom | |
| task.teardown() | |
| context.close() | |
| # keep display | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42, remove_human_display=False) | |
| task.setup(page=page) | |
| for element_id in ["reward-display", "click-canvas", "sync-task-cover"]: | |
| element_in_dom = page.evaluate(f"!!document.getElementById('{element_id}')") | |
| assert element_in_dom | |
| assert page.evaluate(f"document.getElementById('query').innerHTML") != "" | |
| for element_id in ["wrap", "area"]: | |
| element_in_dom = page.evaluate(f"!!document.getElementById('{element_id}')") | |
| assert element_in_dom | |
| task.teardown() | |
| context.close() | |
| browser.close() | |
| def test_viewport(task_cls): | |
| env = gym.make( | |
| f"browsergym/{task_cls.get_task_id()}", | |
| headless=__HEADLESS, | |
| slow_mo=__SLOW_MO, | |
| ) | |
| obs, info = env.reset(seed=42) | |
| screenshot = obs["screenshot"] | |
| # 3D array (height, width, rgb) of unsigned bytes (between 0 and 255) | |
| # Miniwob viewport should be (320x500) | |
| assert screenshot.shape[0] == 320 | |
| assert screenshot.shape[1] == 500 | |
| assert screenshot.shape[2] == 3 # RGB | |
| env.close() | |
| def test_forbidden_navigation(task_cls): | |
| pw = browsergym.core._get_global_playwright() | |
| browser = pw.chromium.launch(headless=__HEADLESS, slow_mo=__SLOW_MO) | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42) | |
| task.setup(page=page) | |
| reward, done, msg, info = task.validate(page, []) | |
| assert reward == 0.0 and done == False | |
| page.goto("http://www.google.com") | |
| reward, done, msg, info = task.validate(page, []) | |
| assert reward == 0.0 and done == True | |
| task.teardown() | |
| context.close() | |
| browser.close() | |
| def test_forbidden_navigation_2(task_cls): | |
| pw = browsergym.core._get_global_playwright() | |
| browser = pw.chromium.launch(headless=__HEADLESS, slow_mo=__SLOW_MO) | |
| context = browser.new_context() | |
| page = context.new_page() | |
| task = task_cls(seed=42) | |
| task.setup(page=page) | |
| reward, done, msg, info = task.validate(page, []) | |
| assert reward == 0.0 and done == False | |
| page2 = context.new_page() | |
| page2.goto("http://www.google.com") | |
| reward, done, msg, info = task.validate(page, []) | |
| assert reward == 0.0 and done == False | |
| reward, done, msg, info = task.validate(page2, []) | |
| assert reward == 0.0 and done == True | |
| task.teardown() | |
| context.close() | |
| browser.close() | |