browser->setHttpAuth($user, $password); } /** * Gets the tag name of a given xpath * @param string $xpath * @return string * @throws DriverException */ public function getTagName($xpath) { $elements = $this->findElement($xpath, 1); return $this->browser->tagName($elements["page_id"], $elements["ids"][0]); } /** * Gets the attribute value of a given element and name * @param string $xpath * @param string $name * @return string * @throws DriverException */ public function getAttribute($xpath, $name) { $elements = $this->findElement($xpath, 1); return $this->browser->attribute($elements["page_id"], $elements["ids"][0], $name); } /** * Check if element given by xpath is visible or not * @param string $xpath * @return bool * @throws DriverException */ public function isVisible($xpath) { $elements = $this->findElement($xpath, 1); return $this->browser->isVisible($elements["page_id"], $elements["ids"][0]); } /** * Drags one element to another * @param string $sourceXpath * @param string $destinationXpath * @throws DriverException */ public function dragTo($sourceXpath, $destinationXpath) { $sourceElement = $this->findElement($sourceXpath, 1); $destinationElement = $this->findElement($destinationXpath, 1); $this->browser->drag($sourceElement["page_id"], $sourceElement["ids"][0], $destinationElement["ids"][0]); } /** * Upload a file to the browser * @param string $xpath * @param string $path * @throws DriverException */ public function attachFile($xpath, $path) { if (!file_exists($path)) { throw new DriverException("Wow there the file does not exist, you can not upload it"); } if (($realPath = realpath($path)) === false) { throw new DriverException("Wow there the file does not exist, you can not upload it"); } $element = $this->findElement($xpath, 1); $tagName = $this->getTagName($xpath); if ($tagName != "input") { throw new DriverException("The element is not an input element, you can not attach a file to it"); } $attributes = $this->getBrowser()->attributes($element["page_id"], $element["ids"][0]); if (!isset($attributes["type"]) || $attributes["type"] != "file") { throw new DriverException("The element is not an input file type element, you can not attach a file to it"); } $this->browser->selectFile($element["page_id"], $element["ids"][0], $realPath); } /** * Puts the browser control inside the IFRAME * You own the control, make sure to go back to the parent calling this method with null * @param string $name */ public function switchToIFrame($name = null) { //TODO: check response of the calls if ($name === null) { $this->browser->popFrame(); return; } else { $this->browser->pushFrame($name); } } /** * Focus on an element * @param string $xpath * @throws DriverException */ public function focus($xpath) { $element = $this->findElement($xpath, 1); $this->browser->trigger($element["page_id"], $element["ids"][0], "focus"); } /** * Blur on element * @param string $xpath * @throws DriverException */ public function blur($xpath) { $element = $this->findElement($xpath, 1); $this->browser->trigger($element["page_id"], $element["ids"][0], "blur"); } /** * Finds elements with specified XPath query. * @param string $xpath * @return string[] * @throws DriverException When the operation cannot be done */ protected function findElementXpaths($xpath) { $elements = $this->browser->find("xpath", $xpath); $nodeXPaths = array(); if (!isset($elements["ids"])) { return array(); } foreach ($elements["ids"] as $i => $elementId) { $nodeXPaths[] = sprintf('(%s)[%d]', $xpath, $i + 1); } return $nodeXPaths; } }