I use the direct property access like obj.href when it's a standard attribute that all browsers support because I find the code a lot more readable and it works.
If it's a non-standard attribute or one I made up myself as a means of storing some data on the object, I use get/setAttribute().
I know of no reasons why one should always use get/setAttribute() and I've never had trouble in any browser using obj.id, obj.href, obj.className, obj.value, etc...