First understand BDD:
BDD is not just about testing it is a type of development practice, that avoids the difficulty of providing a definition of "Done".
https://dannorth.net/introducing-bdd/ the author of BDD style defines
As per the document
“Behaviour” is a more useful word than “test” Now I had a tool –
agiledox – to remove the word “test” and ...
In the first case, you are coupling your tests with the page object through a convention on the strings "email_field" and "password_field"
If a change is not done correctly, you would discover it only at run time. Not so good.
In the second case, you are coupling through the attributes. Erroneous changes would be catch at compilation time,...