Finding Position of a Nested List By A Value Test

What I am looking for is an understanding of why what seems to me a straightforward extension of finding elements in lists does not extend (without returning error messages) to nested lists.

A couple of different syntaxes that return the position in flat lists:

test1 = {1, 2, 3, 4}; FirstPosition[test1, _?(# > 2 &)] FirstPosition[test1, n_ /; n > 2] 

In both cases the expected result of 3 is returned.

If I try what seems to me the logical way of specifying a value to test in a nested list, like:

test2 = {{1, 100}, {2, 200}, {3, 300}, {4, 400}}; FirstPosition[test2, _?(First[#] > 2 &)] FirstPosition[test2, n_ /; First[n] > 2] FirstPosition[test2, n_ /; n[[1]] > 2] 

They return the value (3) as I expect. But they also return similar error messages like:

First::normal: Nonatomic expression expected at position 1 in First[List] 

with a stack trace ending in:

FirstPosition[{{1, 100}, {2, 200}, {3, 300}, {4, 400}}, _?(First[#1] > 2 &)] 

I do not understand what the error is here, or how it can be avoided. I would like to understand so that I can perform similar tests on arbitrarily complex nested lists, using the regular indexing syntax to reference the values to be tested without getting error messages.

There is nothing special about using FirstPosition in this example, other functions like Position, etc. are equally relevant.