webrl/VAB-WebArena-Lite/tests/test_browser_env/test_actions.py
2025-04-23 17:01:18 +08:00

88 lines
4.6 KiB
Python

import numpy as np
from browser_env import *
def test_is_equivalent() -> None:
for action_type in ActionTypes.__members__.values():
action_a = create_random_action()
action_b = create_random_action()
if action_a["action_type"] != action_b["action_type"]:
assert not is_equivalent(action_a, action_b)
action_a["action_type"] = action_type
action_b["action_type"] = action_type
match action_type:
case ActionTypes.MOUSE_CLICK | ActionTypes.MOUSE_HOVER:
if not np.allclose(action_a["coords"], action_b["coords"]):
assert not is_equivalent(action_a, action_b)
action_a["coords"] = action_b["coords"]
assert is_equivalent(action_a, action_b)
case ActionTypes.KEYBOARD_TYPE:
if action_a["text"] != action_b["text"]:
assert not is_equivalent(action_a, action_b)
action_a["text"] = action_b["text"]
assert is_equivalent(action_a, action_b)
case ActionTypes.CLICK | ActionTypes.HOVER | ActionTypes.TYPE:
if action_a["element_id"] and action_b["element_id"]:
if action_a["element_id"] != action_b["element_id"]:
assert not is_equivalent(action_a, action_b)
action_a["element_id"] = action_b["element_id"]
assert is_equivalent(action_a, action_b)
elif action_a["element_id"] and action_b["element_id"]:
if action_a["element_role"] != action_b["element_role"]:
assert not is_equivalent(action_a, action_b)
action_a["element_role"] = action_b["element_role"]
if action_a["element_name"] != action_b["element_name"]:
assert not is_equivalent(action_a, action_b)
action_a["element_name"] = action_b["element_name"]
assert is_equivalent(action_a, action_b)
elif action_a["pw_code"] and action_b["pw_code"]:
if action_a["pw_code"] != action_b["pw_code"]:
assert not is_equivalent(action_a, action_b)
action_a["pw_code"] = action_b["pw_code"]
assert is_equivalent(action_a, action_b)
else:
action_a["element_id"] = action_b["element_id"]
assert is_equivalent(action_a, action_b)
case ActionTypes.GOTO_URL:
if action_a["url"] != action_b["url"]:
assert not is_equivalent(action_a, action_b)
action_a["url"] = action_b["url"]
assert is_equivalent(action_a, action_b)
case ActionTypes.PAGE_FOCUS:
if action_a["page_number"] != action_b["page_number"]:
assert not is_equivalent(action_a, action_b)
action_a["page_number"] = action_b["page_number"]
assert is_equivalent(action_a, action_b)
case ActionTypes.SCROLL:
da = "up" if "up" in action_a["direction"] else "down"
db = "up" if "up" in action_b["direction"] else "down"
if da != db:
assert not is_equivalent(action_a, action_b)
action_a["direction"] = action_b["direction"]
assert is_equivalent(action_a, action_b)
case ActionTypes.KEY_PRESS:
if action_a["key_comb"] != action_b["key_comb"]:
assert not is_equivalent(action_a, action_b)
action_a["key_comb"] = action_b["key_comb"]
assert is_equivalent(action_a, action_b)
case ActionTypes.CHECK | ActionTypes.SELECT_OPTION:
if action_a["pw_code"] != action_b["pw_code"]:
assert not is_equivalent(action_a, action_b)
action_a["pw_code"] = action_b["pw_code"]
assert is_equivalent(action_a, action_b)
case ActionTypes.STOP:
if action_a["answer"] != action_b["answer"]:
assert not is_equivalent(action_a, action_b)
action_a["answer"] = action_b["answer"]
assert is_equivalent(action_a, action_b)
case _:
assert is_equivalent(action_a, action_b)
def test_action2create_function() -> None:
for _ in range(1000):
action = create_random_action()
create_function = action2create_function(action)
assert is_equivalent(action, eval(create_function))