You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_playwright_controller.py 2.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import pytest
  2. from autogen_ext.agents.web_surfer.playwright_controller import PlaywrightController
  3. from playwright.async_api import async_playwright
  4. FAKE_HTML = """
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10. <title>Fake Page</title>
  11. </head>
  12. <body>
  13. <h1 id="header">Welcome to the Fake Page</h1>
  14. <button id="click-me">Click Me</button>
  15. <input type="text" id="input-box" />
  16. </body>
  17. </html>
  18. """
  19. @pytest.mark.asyncio
  20. async def test_playwright_controller_initialization() -> None:
  21. controller = PlaywrightController()
  22. assert controller.viewport_width == 1440
  23. assert controller.viewport_height == 900
  24. assert controller.animate_actions is False
  25. @pytest.mark.asyncio
  26. async def test_playwright_controller_visit_page() -> None:
  27. async with async_playwright() as p:
  28. browser = await p.chromium.launch(headless=True)
  29. context = await browser.new_context()
  30. page = await context.new_page()
  31. await page.set_content(FAKE_HTML)
  32. controller = PlaywrightController()
  33. await controller.visit_page(page, "data:text/html," + FAKE_HTML)
  34. assert page.url.startswith("data:text/html")
  35. @pytest.mark.asyncio
  36. async def test_playwright_controller_click_id() -> None:
  37. async with async_playwright() as p:
  38. browser = await p.chromium.launch(headless=True)
  39. context = await browser.new_context()
  40. page = await context.new_page()
  41. await page.set_content(FAKE_HTML)
  42. controller = PlaywrightController()
  43. rects = await controller.get_interactive_rects(page)
  44. click_me_id = ""
  45. for rect in rects:
  46. if rects[rect]["aria_name"] == "Click Me":
  47. click_me_id = str(rect)
  48. break
  49. await controller.click_id(page, click_me_id)
  50. assert await page.evaluate("document.activeElement.id") == "click-me"
  51. @pytest.mark.asyncio
  52. async def test_playwright_controller_fill_id() -> None:
  53. async with async_playwright() as p:
  54. browser = await p.chromium.launch(headless=True)
  55. context = await browser.new_context()
  56. page = await context.new_page()
  57. await page.set_content(FAKE_HTML)
  58. rects = await PlaywrightController().get_interactive_rects(page)
  59. input_box_id = ""
  60. for rect in rects:
  61. if rects[rect]["tag_name"] == "input, type=text":
  62. input_box_id = str(rect)
  63. break
  64. controller = PlaywrightController()
  65. await controller.fill_id(page, input_box_id, "test input")
  66. assert await page.evaluate("document.getElementById('input-box').value") == "test input"