import os import gymnasium as gym import re import pytest # register gym environments import browsergym.miniwob __SLOW_MO = 1000 if "DISPLAY_BROWSER" in os.environ else None __HEADLESS = False if "DISPLAY_BROWSER" in os.environ else True @pytest.mark.parametrize("seed", range(5)) def test_cheat(seed): env = gym.make( "browsergym/miniwob.click-menu-2", headless=__HEADLESS, slow_mo=__SLOW_MO, action_mapping=None, ) obs, info = env.reset(seed=seed) assert obs["last_action_error"] == "" match1 = re.match( 'Click the "Menu" button, and then find and click on the item labeled "(.+)".', obs["goal"] ) match2 = re.match( 'Click the "Menu" button, and then find and click on the item with the "(.+)" icon.', obs["goal"], ) assert match1 or match2 if match1: item_label = match1.groups()[0] item_classname = { "Save": "ui-icon-disk", "Prev": "ui-icon-seek-start", "Stop": "ui-icon-stop", "Play": "ui-icon-play", "Next": "ui-icon-seek-end", "Zoom In": "ui-icon-zoomin", "Zoom Out": "ui-icon-zoomout", }[item_label] else: item_classname = match2.groups()[0] action = f"""\ page.get_by_text("Menu").click() """ obs, reward, term, trunc, info = env.step(action) assert obs["last_action_error"] == "" assert reward == 0 assert term == False if item_classname in ("ui-icon-seek-start", "ui-icon-stop", "ui-icon-play", "ui-icon-seek-end"): action = f"""\ page.get_by_text("Playback").click() """ obs, reward, term, trunc, info = env.step(action) assert obs["last_action_error"] == "" assert reward == 0 assert term == False action = f"""\ page.locator(".{item_classname}").click() """ obs, reward, term, trunc, info = env.step(action) assert obs["last_action_error"] == "" assert reward == 1 assert term == True env.close()