> The issue is that it would require instantiating a new ElementFactory instead of cloning it, to make it use the cloned driver (instead of cloning it again on its own). This would prevent using subclasses. And I think the cloning of drivers is already an issue currently for some cases (the BrowserKit client is not cloned fully currently, and in the PR trying to do it, Fabien does not think cloning a client is really a good idea). Any level of dependency of the driver could have some state, making the cloning a bit difficult.

Cloning maybe a shortcut to have duplicate object instead of creating a new one, but IMHO the service locators or other dependency injection scheme must be used to create new sessions, rather than cloning existing ones just because people don't know how (or don't want to) to create new ones themselves.

> I agree about moving the creation of the DocumentElement to the factory.

This idea can be advanced even further (see #408), by:

1. instantiating new `DocumentElement` only in `visit` method
2. returning the DocumentElement from the `visit` method (of course further `getPage` calls will continue to work)
3. storing current page url within `DocumentElement` to allow comparing 2 pages

This would allow for `ElementFinder` descendants to represent PageFactory (from PageObject pattern) where each page is uniquely tied to the url where it was opened and can have some unique method to ease up overall testing process. I've actually implemented a library (not 100% complete, but usable), where I use Mink and Selenium-compatible `@find-by` annotations to create PageObjects, based on Mink's `DocumentElement` class: https://github.com/aik099/qa-tools. It represents a plug-n-play solution regardless of used testing framework. I haven't seen Selenium-like (with proxies, element locators, annotations) implementations of PageObject on PHP, so I wrote my own. On top of that I've actually added a port from https://github.com/yandex-qatools/htmlelements (on Java) library to convert so allmighty NodeElement to more specific page elements, which only have methods what they need, like Form, Button, Link, etc.

Also moving DocumentElement creation away from constructor clearly tells, that before doing a `visit` call you can't operate on page retrieved via `getPage` method before. We might want to do `$this->page = null` in `stop` method of the session though.