Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[FrameworkBundle] WebTestCaseTest::assertCheckboxChecked/assertCheckboxNotChecked does not work with html5 #47830

Closed
@bendavies

Description

@bendavies

Symfony version(s) affected

6.1, sort of

Description

The WebTestCaseTest::assertCheckboxChecked/assertCheckboxNotChecked assertions do not work with html5 content.

They are only tested with html 4 content.

If the html tag in these tests with <!DOCTYPE html>, the tests fail.

This is because, in html5, checked is a boolean attribute,
i.e this is valid:
<input type="checkbox" name="rememberMe" checked>
while this is not:
<input type="checkbox" name="rememberMe" checked="checked">

so the new CrawlerSelectorAttributeValueSame("input[name=\"$fieldName\"]", 'checked', 'checked') check fails.

masterminds/html5 will parse <input type="checkbox" name="rememberMe" checked="checked"> as <input type="checkbox" name="rememberMe" checked>.

How to reproduce

They are only tested with html 4 content

Replace the html tag in these tests with <!DOCTYPE html>.

Possible Solution

not sure, maybe modify the assertion so it works with html4 and 5 parsers

LogicalOr(new CrawlerSelectorAttributeValueSame(...), new CrawlerSelectorAttributeExists(...))

where CrawlerSelectorAttributeExists is a new Constraint.

Additional Context

We discoverd this issue while upgrading from symfony 5.4 to 6.1, because masterminds/html5 became a mandatory dependency in 6.1: #44170, so previously on 5.4, our html in functional tests was not parsed as html5.

it should be noted that html5 is used in a default symfony project:
https://github.com/symfony/recipes/blob/f54b694258dfcb356f6c59e2ce1a4c49f3cceae9/symfony/twig-bundle/5.4/templates/base.html.twig#L1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions