Mercurial > hg > isophonics-drupal-site
comparison vendor/jcalderonzumba/mink-phantomjs-driver/src/PhantomJSDriver.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Zumba\Mink\Driver; | |
4 | |
5 use Behat\Mink\Element\NodeElement; | |
6 use Behat\Mink\Exception\DriverException; | |
7 | |
8 /** | |
9 * Class PhantomJSDriver | |
10 * @package Behat\Mink\Driver | |
11 */ | |
12 class PhantomJSDriver extends BasePhantomJSDriver { | |
13 | |
14 use SessionTrait; | |
15 use NavigationTrait; | |
16 use CookieTrait; | |
17 use HeadersTrait; | |
18 use JavascriptTrait; | |
19 use MouseTrait; | |
20 use PageContentTrait; | |
21 use KeyboardTrait; | |
22 use FormManipulationTrait; | |
23 use WindowTrait; | |
24 | |
25 /** | |
26 * Sets the basic auth user and password | |
27 * @param string $user | |
28 * @param string $password | |
29 */ | |
30 public function setBasicAuth($user, $password) { | |
31 $this->browser->setHttpAuth($user, $password); | |
32 } | |
33 | |
34 /** | |
35 * Gets the tag name of a given xpath | |
36 * @param string $xpath | |
37 * @return string | |
38 * @throws DriverException | |
39 */ | |
40 public function getTagName($xpath) { | |
41 $elements = $this->findElement($xpath, 1); | |
42 return $this->browser->tagName($elements["page_id"], $elements["ids"][0]); | |
43 } | |
44 | |
45 /** | |
46 * Gets the attribute value of a given element and name | |
47 * @param string $xpath | |
48 * @param string $name | |
49 * @return string | |
50 * @throws DriverException | |
51 */ | |
52 public function getAttribute($xpath, $name) { | |
53 $elements = $this->findElement($xpath, 1); | |
54 return $this->browser->attribute($elements["page_id"], $elements["ids"][0], $name); | |
55 } | |
56 | |
57 /** | |
58 * Check if element given by xpath is visible or not | |
59 * @param string $xpath | |
60 * @return bool | |
61 * @throws DriverException | |
62 */ | |
63 public function isVisible($xpath) { | |
64 $elements = $this->findElement($xpath, 1); | |
65 return $this->browser->isVisible($elements["page_id"], $elements["ids"][0]); | |
66 } | |
67 | |
68 /** | |
69 * Drags one element to another | |
70 * @param string $sourceXpath | |
71 * @param string $destinationXpath | |
72 * @throws DriverException | |
73 */ | |
74 public function dragTo($sourceXpath, $destinationXpath) { | |
75 $sourceElement = $this->findElement($sourceXpath, 1); | |
76 $destinationElement = $this->findElement($destinationXpath, 1); | |
77 $this->browser->drag($sourceElement["page_id"], $sourceElement["ids"][0], $destinationElement["ids"][0]); | |
78 } | |
79 | |
80 /** | |
81 * Upload a file to the browser | |
82 * @param string $xpath | |
83 * @param string $path | |
84 * @throws DriverException | |
85 */ | |
86 public function attachFile($xpath, $path) { | |
87 if (!file_exists($path)) { | |
88 throw new DriverException("Wow there the file does not exist, you can not upload it"); | |
89 } | |
90 | |
91 if (($realPath = realpath($path)) === false) { | |
92 throw new DriverException("Wow there the file does not exist, you can not upload it"); | |
93 } | |
94 | |
95 $element = $this->findElement($xpath, 1); | |
96 $tagName = $this->getTagName($xpath); | |
97 if ($tagName != "input") { | |
98 throw new DriverException("The element is not an input element, you can not attach a file to it"); | |
99 } | |
100 | |
101 $attributes = $this->getBrowser()->attributes($element["page_id"], $element["ids"][0]); | |
102 if (!isset($attributes["type"]) || $attributes["type"] != "file") { | |
103 throw new DriverException("The element is not an input file type element, you can not attach a file to it"); | |
104 } | |
105 | |
106 $this->browser->selectFile($element["page_id"], $element["ids"][0], $realPath); | |
107 } | |
108 | |
109 /** | |
110 * Puts the browser control inside the IFRAME | |
111 * You own the control, make sure to go back to the parent calling this method with null | |
112 * @param string $name | |
113 */ | |
114 public function switchToIFrame($name = null) { | |
115 //TODO: check response of the calls | |
116 if ($name === null) { | |
117 $this->browser->popFrame(); | |
118 return; | |
119 } else { | |
120 $this->browser->pushFrame($name); | |
121 } | |
122 } | |
123 | |
124 /** | |
125 * Focus on an element | |
126 * @param string $xpath | |
127 * @throws DriverException | |
128 */ | |
129 public function focus($xpath) { | |
130 $element = $this->findElement($xpath, 1); | |
131 $this->browser->trigger($element["page_id"], $element["ids"][0], "focus"); | |
132 } | |
133 | |
134 /** | |
135 * Blur on element | |
136 * @param string $xpath | |
137 * @throws DriverException | |
138 */ | |
139 public function blur($xpath) { | |
140 $element = $this->findElement($xpath, 1); | |
141 $this->browser->trigger($element["page_id"], $element["ids"][0], "blur"); | |
142 } | |
143 | |
144 /** | |
145 * Finds elements with specified XPath query. | |
146 * @param string $xpath | |
147 * @return NodeElement[] | |
148 * @throws DriverException When the operation cannot be done | |
149 */ | |
150 public function find($xpath) { | |
151 $elements = $this->browser->find("xpath", $xpath); | |
152 $nodeElements = array(); | |
153 | |
154 if (!isset($elements["ids"])) { | |
155 return null; | |
156 } | |
157 | |
158 foreach ($elements["ids"] as $i => $elementId) { | |
159 $nodeElements[] = new NodeElement(sprintf('(%s)[%d]', $xpath, $i + 1), $this->session); | |
160 } | |
161 return $nodeElements; | |
162 } | |
163 | |
164 } |