A zero-based index requires that the forms always appear on the page in exactly the order you’re asserting for. If you move the forms around on the page, you’ll have to rewrite your assertion code as well. For that reason alone, I would not personally go for that. An ID attribute is unique and would be more flexible. It’s also more telling – it’s more obvious what you’re asserting if you pass hasNameTypeValueInputs than 23 as a parameter.
You could also use class attributes – that would give you the advantage that you could assert multiple forms by the same set of rules simply by adding appropriate classes to the form elements.
If you wanted to get really fancy, you could add a third (optional) argument detailing what type the second argument is: ID attribute (default, I would suggest), zero-based index or class attribute.