Because it was driving me insane, and because I don't want to ever forget...
Playwright is a wonderful alternative to
jest-puppeteer for doing automated headless browser end-to-end testing. But one I couldn't find in the documentation, Google search, or Stackoverflow was: How do you submit a form without clicking a button?. I.e. you have focus in an
input field and hit Enter. Here's how you do it:
await page.$eval('form[role="search"]', (form) => form.submit());
The first part is any CSS selector that gets you to the
<form> element. In this case, imagine it was:
<form action="/search" role="search"> <input type="search" name="q"> </form>
You, or my future self, might be laughing at me for missing something obvious but this one took me forever to solve so I thought I'd better blog about it in case someone else gets into the same jam.
UPDATE (Sep 2021)
I found a much easier way:
This obviously only works when you've typed something into an input so the focus is on that
<input> element. E.g.:
await page.fill('input[aria-label="New shopping list item"]', "Carrots"); await page.keyboard.press("Enter");