Because we use Locator.waitFor() in the find* queries implementation, we have to specify a Playwright state for the element we are waiting on. I naively went with the Playwright default, which is visible. However, this causes inconsistency with the get* and query* queries because they don't verify the element state in Playwright at all.
Here are some options I see to resolve this:
Switch the default state/asyncUtilExpectedState to 'attached'
Assert the state consistently (isVisible()), for elements returned from the other types of queries (we'd probably also want to rename the option to remove async from the name π)
Document this well and be okay that find* queries already serve a different purpose on top of the other query types
1 and 2 will now be breaking changes since we already released stuff on 4.4.0. We should probably do 3 in some form in the meantime regardless of what we choose.
This originally came up in #519 / https://github.com/testing-library/playwright-testing-library/issues/519#issuecomment-1253172660
Because we use
Locator.waitFor()
in thefind*
queries implementation, we have to specify a Playwrightstate
for the element we are waiting on. I naively went with the Playwright default, which isvisible
. However, this causes inconsistency with theget*
andquery*
queries because they don't verify the element state in Playwright at all.Here are some options I see to resolve this:
state
/asyncUtilExpectedState
to'attached'
state
consistently (isVisible()
), for elements returned from the other types of queries (we'd probably also want to rename the option to removeasync
from the name π)find*
queries already serve a different purpose on top of the other query types1 and 2 will now be breaking changes since we already released stuff on 4.4.0. We should probably do 3 in some form in the meantime regardless of what we choose.
Related inconsistency/rough edge: #506