If I didn't miss anything, then we have:

1. SelectorsHandler
 1. doesn't need anything
2. Driver
 1. doesn't need anything
3. `Session`
 1. needs `Driver` to control browser
 2. needs `SelectorsHandler` to pass it to created `DocumentElement` (doubtful, maybe we can create `PageFactory`, which would 
 3. needs `ElementFactory` to convert xpaths from `Driver` into `NodeElement`
remove this dependency from `Session`) 
4. ElementFactory
 1. needs `Driver` to use in `NodeElement` construction
 2. needs `SelectorsHandler` to use in `NodeElement` construction
5. NodeElement
 1. needs `Driver` to get more info about element from it's xpath
 2. needs `ElementFactory` to create `NodeElement` objects for sub-elements
 3. needs `SelectorsHandler` for selector-to-xpath conversion in `findAll` method

Then code might look like this:

```php
$driver = new Driver();
$selectorsHandler = new SelectorsHandler();
$elementFactory = new ElementFactory($driver, $selectorsHandler); // notice that I pass dependencies here
$session = new Session($driver, $selectorsHandler, $elementFactory);
```

In code above I see no circular dependencies. This way we can reduce parameter count in `createNodeElement` to 1: $xpath.