public function findAll($locator, $parent = null)
    {
        $commandUri = empty($parent) ? "elements" : "element/{$parent->getElementId()}/elements";
        $command = $this->getDriver()->factoryCommand(
            $commandUri,
            WebDriver_Command::METHOD_POST,
            WebDriver_Util::parseLocator($locator)
        );
        try {
            $elementList = $this->getDriver()->curl($command);
        } catch (WebDriver_Exception $e) {
            $parentText = empty($parent) ? '' : " (parent: {$parent->getLocator()})";
            throw new WebDriver_Exception("Elements not found: {$locator}{$parentText} with error: {$e->getMessage()}");
        }
        $result = [];
        foreach ($elementList['value'] as $value) {
            $elementClass = $this->elementClass;
            $result[] = new $elementClass($this, $locator, $parent, $value['ELEMENT']);
        }
        return $result;
    }