Problem
A <button type="submit"> inside a plain HTML form (no phx-submit) is classified as :none by classify_interaction. When the form submit triggers a full page navigation to a LiveView page, wallabidi doesn't wait for the page load or LiveView connection.
Impact
After clicking "Continue to Teamology" (plain form submit → redirect to /school LiveView), the next interaction — click(Query.css("[id='#profile-menu-button']")) — fires before LiveSocket connects. The button's phx-click={JS.toggle(...)} binding isn't active yet, so the dropdown doesn't open.
Current workaround
teacher
|> assert_has(Query.css(".phx-connected")) # wait for LiveSocket
|> click(Query.css("[id='#profile-menu-button']"))
Suggested fix
In check_phx_binding / check_phx_binding_xpath, if the element is a submit button inside a <form> (even without phx-submit), classify as :full_page:
if (type === 'click') {
// ... existing phx-click checks ...
// Submit button inside any form → full page navigation
if (el.type === 'submit' || el.tagName === 'BUTTON') {
var form = el.closest('form');
if (form && form.getAttribute('phx-submit')) return 'patch';
if (form) return 'full_page'; // non-LiveView form submit
}
// ... existing anchor checks ...
}
This ensures await_page_load + await_liveview_connected run after the form submit, so the next page's LiveSocket is connected before subsequent interactions.
Problem
A
<button type="submit">inside a plain HTML form (nophx-submit) is classified as:nonebyclassify_interaction. When the form submit triggers a full page navigation to a LiveView page, wallabidi doesn't wait for the page load or LiveView connection.Impact
After clicking "Continue to Teamology" (plain form submit → redirect to
/schoolLiveView), the next interaction —click(Query.css("[id='#profile-menu-button']"))— fires before LiveSocket connects. The button'sphx-click={JS.toggle(...)}binding isn't active yet, so the dropdown doesn't open.Current workaround
Suggested fix
In
check_phx_binding/check_phx_binding_xpath, if the element is a submit button inside a<form>(even withoutphx-submit), classify as:full_page:This ensures
await_page_load+await_liveview_connectedrun after the form submit, so the next page's LiveSocket is connected before subsequent interactions.