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

Abierto
#5,502 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
78/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
playwright, python, typescript

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Python
Estrellas
662
Forks
149
Merge medio
6 h 13 min
PR fusionados (30 d)
121

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MarketSquare/robotframework-browser

Todos los issues de MarketSquare/robotframework-browser

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.