Add `include_shadow=` argument to `Get Page Source`

Đang mở
#5,502 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
78/100
Loại issue
Tính năng
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
playwright, python, typescript

Hướng nghiên cứu

Read Browser/keywords/getters.py and trace Get Page Source through protobuf/playwright.proto, node/playwright-wrapper/grpc-service.ts, and node/playwright-wrapper/getters.ts. Add the named include_shadow option with a default of False, and check that it reaches Playwright's page.content() call. Add coverage in atest/test/02_Content_Keywords/basic_getters.robot and a focused wrapper test; done means open shadow content appears only when enabled and existing output stays unchanged by default.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Use case

Get Page Source returns the page HTML from page.content(). Elements inside a shadow root are not in it: a web component appears as an empty host element. For pages built from web components (Lit, Stencil, Shoelace, Salesforce Lightning and similar) the page source is then nearly empty, so asserting on it, or saving it to debug a failure, shows little.

Playwright 1.64 added includeShadow to page.content(). With it, open shadow roots are written as declarative shadow DOM, <template shadowrootmode="open"> inside the host element. Closed shadow roots are never included.

Proposed keyword / arguments

Get Page Source assertion_operator=None assertion_expected=None message=None * include_shadow=False

  • include_shadow: named-only, defaults to False. When True, the content of open shadow roots is included as <template shadowrootmode="open"> elements inside their hosts. Closed shadow roots are never included.
*** Test Cases ***
Page Source Shows Web Component Content
    New Page    ${WEB_COMPONENT_URL}
    Get Page Source    not contains    Inside Shadow DOM
    Get Page Source    contains    <template shadowrootmode="open">    include_shadow=True
    Get Page Source    contains    Inside Shadow DOM    include_shadow=True

Playwright API

Checked with Playwright 1.65.0 and Chromium: an open root comes out as <div id="host"><template shadowrootmode="open"><b>in shadow</b></template></div>, a closed root as an empty <div id="closed"></div>, and without the option the open host is empty too.

Implementation notes

All references are to upstream main (5e350998).

  • protobuf/playwright.proto:596: rpc GetPageSource(Request.Empty) becomes rpc GetPageSource(Request.Bool). Request.Bool (:421-423) already exists and is used for similar single flags (SetOffline, GetConsoleLog). Still one Playwright call per rpc.
  • node/playwright-wrapper/grpc-service.ts:296-305 getPageSource: take pb.Request_Bool and pass request.value on.
  • node/playwright-wrapper/getters.ts:380-381 getPageSource(page): add the flag and call page.content({ includeShadow }). The chunking that follows (:383-394) stays as is.
  • Browser/keywords/getters.py:189-227 get_page_source: add *, include_shadow: bool = False after message, send Request().Bool(value=include_shadow) at :215, and document the argument, including that closed shadow roots are never included. The docstring also points to Get Property outerHTML for one element (:206-209); that does not include shadow content, which is worth one sentence.
  • Tests: atest/test/02_Content_Keywords/basic_getters.robot:181-182 has the plain Get Page Source case. Add one against node/dynamic-test-app/static/webcomponent.html, which attaches an open shadow root with the heading "Inside Shadow DOM" (:24-30): that text is missing by default and present with include_shadow=True. There is no Jest test for getPageSource in node/playwright-wrapper/__tests__/ today; a small one that mocks page.content and checks the option is passed is enough.

Backwards compatibility

Additive, named-only argument with a default that keeps today's output. The proto request type changes, but the rpc is internal to the library.

Ngôn ngữ chính
Python
Star
662
Fork
149
Merge trung bình
6 giờ 13 phút
Pull request đã merge (30 ngày)
121

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của MarketSquare/robotframework-browser

Tất cả issue của MarketSquare/robotframework-browser

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.