Hey Andrew - nice article!
For choosing selectors have you thought about testing like a real user by using selectors that they can see - such as button or placeholder text?
These selectors shouldn't change over time and if they do it might be a sign that your application is broken. If the user can't find the button that says "Login" something is wrong. I find this is a nice combination of unbreakablity and making your test more real world