Promise.all takes an iterable, not multiple arguments. It tried to iterate your first argument, but that didn't have a [Symbol.iterator] method - "undefined is not a function". Pass an array:
await Promise.all([
page.$eval('form', form => form.submit()),
page.waitForNavigation(),
])