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

90 lines
3.8 KiB
Python

from typing import Dict, Generator, Optional, Tuple, Type, Union, cast
import pytest
from playwright.sync_api import Page
from browser_env import ScriptBrowserEnv, create_playwright_action
HEADLESS = True
SLOW_MO = 0
def test_frame_locator(script_browser_env: ScriptBrowserEnv) -> None:
env = script_browser_env
seq = """page.goto("https://www.littlewebhut.com/articles/html_iframe_example/")
page.frame_locator("iframe[name=\\"imgbox\\"]").get_by_role("img").click()"""
env.reset()
for action in seq.split("\n"):
action = action.strip()
_, success, _, _, info = env.step(create_playwright_action(action))
assert success
def test_basic(script_browser_env: ScriptBrowserEnv) -> None:
# click, fill, press, check, goto
env = script_browser_env
seq = """page.goto("https://demo.playwright.dev/todomvc/")
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("hello")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_placeholder("What needs to be done?").fill("world")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_placeholder("What needs to be done?").fill("yes")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_placeholder("What needs to be done?").fill("no")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_role("listitem").filter(has_text="world").get_by_role("checkbox", name="Toggle Todo").check()
page.get_by_role("button", name="Clear completed").click()"""
env.reset()
for action in seq.split("\n"):
action = action.strip()
_, success, _, _, info = env.step(create_playwright_action(action))
assert success
@pytest.mark.skip(reason="not important, but the site is flaky")
def test_hover(script_browser_env: ScriptBrowserEnv) -> None:
env = script_browser_env
seq = """page.goto("https://www.w3schools.com/cssref/tryit.php?filename=trycss_sel_hover")
page.frame_locator("iframe[name=\\'iframeResult\\']").get_by_role("link", name="w3schools.com").hover()"""
env.reset()
for action in seq.split("\n"):
action = action.strip()
_, success, _, _, info = env.step(create_playwright_action(action))
assert success
@pytest.mark.skip(reason="not important, but the site is flaky")
def test_select_option(script_browser_env: ScriptBrowserEnv) -> None:
env = script_browser_env
seq = """page.goto("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select")
page.frame_locator("iframe[name=\\'iframeResult\\']").get_by_role("combobox", name="Choose a car:").select_option("opel")"""
env.reset()
for action in seq.split("\n"):
action = action.strip()
_, success, _, _, info = env.step(create_playwright_action(action))
assert success
def test_xpath(script_browser_env: ScriptBrowserEnv) -> None:
env = script_browser_env
seq = """page.goto("https://demo.playwright.dev/todomvc/")
page.goto("https://demo.playwright.dev/todomvc/#/")
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("hello")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_role("link", name="Completed").click()
page.locator("xpath=/html/body/section/div/header/input").fill("no")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.goto("https://bic-berkeley.github.io/psych-214-fall-2016/string_literals.html")
page.locator("xpath=//*[@id=\'searchbox\']/div/form/input[1]").fill("type")"""
env.reset()
for action in seq.split("\n"):
action = action.strip()
_, success, _, _, info = env.step(create_playwright_action(action))
assert success