public function execute()
    {
        $locator = $this->element->getLocator();
        if (null === $this->callback) {
            throw new WebDriver_Exception("Wait callback is undefined for element '{$locator}''");
        }
        for ($i = 0; $i < $this->timeout; $i++) {
            if (call_user_func($this->callback, $this->element())) {
                return $this;
            }
            sleep(1);
        }
        $message = "Provided state of element '{$locator}' is not reached after timeout";
        $message = ($this->errorMessage == null) ? $message : "{$message} with error: {$this->errorMessage}";
        throw new WebDriver_Exception($message);
    }