I'm having a little trouble incorporating this feedback. Abstracting to this degree means that the tests have to know about certain implementation details. For example:

Suppose the `Alarm#alarmDetails()` method returns an array of `AlarmItem` objects, each wrapping a previously-created alarm as listed in the Panel. `AlarmItem` might implement the following attributes: `AlarmItem#text`, `AlarmItem#isEnabled` and the following method: `AlarmItem#toggle()`.

The problem is that toggling an alarm causes its underlying element to be destroyed and a new DOM element to be created. This means that calling `AlarmItem#toggle` invalidates that `AlarmItem`, and a new one has to be requested through `Alarm#alarmDetails()` before the item's state can be successfully queried.

I think implementation details like these will break through the abstraction wherever we try to wrap dynamically-generated content with interface objects.