The robot will behave differently based on different robots as well. e. g. Bitbeambot isn't accurate enough to use an on-screen keyboard whereas tapster is. Tapster will eventually do multi-finger gestures whereas bitbeambot will not. I'm intending on having a robot capabilities protocol so a robot can say what it will and won't do. If we subclass this will we have re-implement a lot of things in the event that the robot can't do it? Whereas if it lives with an if-statement I can just fall to the else.

I see this as being way too many subclasses. Robot-chrome, robot-safari, robot-ios, robot-android, robot-selendroid, etc. or even tapster-ios, bitbeambot-ios... etc. etc. Also, we don't subclass real-device vs. simulator as of right now. What if they eventually have different methods. Now we are talking even more subclasses.

Anyways, I am probably too much of a node noob to picture what you are talking about, but either way I have other things I need to get to. If this code magically morphed into subclasses that made sense I'd be fine with it, but I lack the time and node-jitsu to take it there at this time, and I don't think we should hold up this check-in.