Version 1
[yaffs-website] / vendor / jcalderonzumba / mink-phantomjs-driver / src / PhantomJSDriver.php
diff --git a/vendor/jcalderonzumba/mink-phantomjs-driver/src/PhantomJSDriver.php b/vendor/jcalderonzumba/mink-phantomjs-driver/src/PhantomJSDriver.php
new file mode 100644 (file)
index 0000000..a226fe5
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+
+namespace Zumba\Mink\Driver;
+
+use Behat\Mink\Exception\DriverException;
+
+/**
+ * Class PhantomJSDriver
+ * @package Behat\Mink\Driver
+ */
+class PhantomJSDriver extends BasePhantomJSDriver {
+
+  use SessionTrait;
+  use NavigationTrait;
+  use CookieTrait;
+  use HeadersTrait;
+  use JavascriptTrait;
+  use MouseTrait;
+  use PageContentTrait;
+  use KeyboardTrait;
+  use FormManipulationTrait;
+  use WindowTrait;
+
+  /**
+   * Sets the basic auth user and password
+   * @param string $user
+   * @param string $password
+   */
+  public function setBasicAuth($user, $password) {
+    $this->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;
+  }
+
+}