1
0

Commands.pm 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. package Selenium::Remote::Commands;
  2. use strict;
  3. use warnings;
  4. use String::TT qw/tt/;
  5. sub new {
  6. my $class = shift;
  7. my $self = {
  8. 'addCookie' => {
  9. 'method' => 'POST',
  10. 'url' => "session/[% session_id %]/[% context %]/cookie"
  11. },
  12. 'goBack' => {
  13. 'method' => 'POST',
  14. 'url' => "session/[% session_id %]/[% context %]/back"
  15. },
  16. 'clearElement' => {
  17. 'method' => 'POST',
  18. 'url' =>
  19. "session/[% session_id %]/[% context %]/element/[% id %]/clear"
  20. },
  21. 'clickElement' => {
  22. 'method' => 'POST',
  23. 'url' =>
  24. "session/[% session_id %]/[% context %]/element/[% id %]/click"
  25. },
  26. 'close' => {
  27. 'method' => 'DELETE',
  28. 'url' => "session/[% session_id %]/[% context %]/window"
  29. },
  30. 'getCurrentUrl' => {
  31. 'method' => 'GET',
  32. 'url' => "session/[% session_id %]/[% context %]/url"
  33. },
  34. 'deleteAllCookies' => {
  35. 'method' => 'DELETE',
  36. 'url' => "session/[% session_id %]/[% context %]/cookie"
  37. },
  38. 'deleteCookie' => {
  39. 'method' => 'DELETE',
  40. 'url' => "session/[% session_id %]/[% context %]/cookie/[% name %]"
  41. },
  42. 'dragElement' => {
  43. 'method' => 'POST',
  44. 'url' =>
  45. "session/[% session_id %]/[% context %]/element/[% id %]/drag"
  46. },
  47. 'elementEquals' => {
  48. 'method' => 'GET',
  49. 'url' =>
  50. "session/[% session_id %]/[% context %]/element/[% id %]/equals/[% other %]"
  51. },
  52. 'executeScript' => {
  53. 'method' => 'POST',
  54. 'url' => "session/[% session_id %]/[% context %]/execute"
  55. },
  56. 'findElement' => {
  57. 'method' => 'POST',
  58. 'url' => "session/[% session_id %]/[% context %]/element"
  59. },
  60. 'findElements' => {
  61. 'method' => 'POST',
  62. 'url' => "session/[% session_id %]/[% context %]/elements"
  63. },
  64. 'findChildElement' => {
  65. 'method' => 'POST',
  66. 'url' =>
  67. "session/[% session_id %]/[% context %]/element/[% id %]/element/[% using %]"
  68. },
  69. 'findChildElements' => {
  70. 'method' => 'POST',
  71. 'url' =>
  72. "session/[% session_id %]/[% context %]/element/[% id %]/elements/[% using %]"
  73. },
  74. 'goForward' => {
  75. 'method' => 'POST',
  76. 'url' => "session/[% session_id %]/[% context %]/forward"
  77. },
  78. 'get' => {
  79. 'method' => 'POST',
  80. 'url' => "session/[% session_id %]/[% context %]/url"
  81. },
  82. 'getActiveElement' => {
  83. 'method' => 'POST',
  84. 'url' => "session/[% session_id %]/[% context %]/element/active"
  85. },
  86. 'getAllCookies' => {
  87. 'method' => 'GET',
  88. 'url' => "session/[% session_id %]/[% context %]/cookie"
  89. },
  90. 'getCurrentWindowHandle' => {
  91. 'method' => 'GET',
  92. 'url' => "session/[% session_id %]/[% context %]/window_handle"
  93. },
  94. 'getElementAttribute' => {
  95. 'method' => 'GET',
  96. 'url' =>
  97. "session/[% session_id %]/[% context %]/element/[% id %]/attribute/[% name %]"
  98. },
  99. 'getElementLocation' => {
  100. 'method' => 'GET',
  101. 'url' =>
  102. "session/[% session_id %]/[% context %]/element/[% id %]/location"
  103. },
  104. 'getElementSize' => {
  105. 'method' => 'GET',
  106. 'url' =>
  107. "session/[% session_id %]/[% context %]/element/[% id %]/size"
  108. },
  109. 'getElementText' => {
  110. 'method' => 'GET',
  111. 'url' =>
  112. "session/[% session_id %]/[% context %]/element/[% id %]/text"
  113. },
  114. 'getElementValue' => {
  115. 'method' => 'GET',
  116. 'url' =>
  117. "session/[% session_id %]/[% context %]/element/[% id %]/value"
  118. },
  119. 'getSpeed' => {
  120. 'method' => 'GET',
  121. 'url' => "session/[% session_id %]/[% context %]/speed"
  122. },
  123. 'getElementTagName' => {
  124. 'method' => 'GET',
  125. 'url' =>
  126. "session/[% session_id %]/[% context %]/element/[% id %]/name"
  127. },
  128. 'getTitle' => {
  129. 'method' => 'GET',
  130. 'url' => "session/[% session_id %]/[% context %]/title"
  131. },
  132. 'getElementValueOfCssProperty' => {
  133. 'method' => 'GET',
  134. 'url' =>
  135. "session/[% session_id %]/[% context %]/element/[% id %]/css/[% property_name %]"
  136. },
  137. 'getVisible' => {
  138. 'method' => 'GET',
  139. 'url' => "session/[% session_id %]/[% context %]/visible"
  140. },
  141. 'getWindowHandles' => {
  142. 'method' => 'GET',
  143. 'url' => "session/[% session_id %]/[% context %]/window_handles"
  144. },
  145. 'hoverOverElement' => {
  146. 'method' => 'POST',
  147. 'url' =>
  148. "session/[% session_id %]/[% context %]/element/[% id %]/hover"
  149. },
  150. 'isElementDisplayed' => {
  151. 'method' => 'GET',
  152. 'url' =>
  153. "session/[% session_id %]/[% context %]/element/[% id %]/displayed"
  154. },
  155. 'isElementEnabled' => {
  156. 'method' => 'GET',
  157. 'url' =>
  158. "session/[% session_id %]/[% context %]/element/[% id %]/enabled"
  159. },
  160. 'isElementSelected' => {
  161. 'method' => 'GET',
  162. 'url' =>
  163. "session/[% session_id %]/[% context %]/element/[% id %]/selected"
  164. },
  165. 'newSession' => {
  166. 'method' => 'POST',
  167. 'url' => 'session'
  168. },
  169. 'getPageSource' => {
  170. 'method' => 'GET',
  171. 'url' => "session/[% session_id %]/[% context %]/source"
  172. },
  173. 'quit' => {
  174. 'method' => 'DELETE',
  175. 'url' => "session/[% session_id %]"
  176. },
  177. 'refresh' => {
  178. 'method' => 'POST',
  179. 'url' => "session/[% session_id %]/[% context %]/refresh"
  180. },
  181. 'screenshot' => {
  182. 'method' => 'GET',
  183. 'url' => "session/[% session_id %]/[% context %]/screenshot"
  184. },
  185. 'sendKeysToElement' => {
  186. 'method' => 'POST',
  187. 'url' =>
  188. "session/[% session_id %]/[% context %]/element/[% id %]/value"
  189. },
  190. 'setElementSelected' => {
  191. 'method' => 'POST',
  192. 'url' =>
  193. "session/[% session_id %]/[% context %]/element/[% id %]/selected"
  194. },
  195. 'setSpeed' => {
  196. 'method' => 'POST',
  197. 'url' => "session/[% session_id %]/[% context %]/speed"
  198. },
  199. 'setVisible' => {
  200. 'method' => 'POST',
  201. 'url' => "session/[% session_id %]/[% context %]/visible"
  202. },
  203. 'submitElement' => {
  204. 'method' => 'POST',
  205. 'url' =>
  206. "session/[% session_id %]/[% context %]/element/[% id %]/submit"
  207. },
  208. 'switchToFrame' => {
  209. 'method' => 'POST',
  210. 'url' => "session/[% session_id %]/[% context %]/frame/[% id %]"
  211. },
  212. 'switchToWindow' => {
  213. 'method' => 'POST',
  214. 'url' => "session/[% session_id %]/[% context %]/window/[% name %]"
  215. },
  216. 'toggleElement' => {
  217. 'method' => 'POST',
  218. 'url' =>
  219. "session/[% session_id %]/[% context %]/element/[% id %]/toggle"
  220. },
  221. };
  222. bless $self, $class or die "Can't bless $class: $!";
  223. return $self;
  224. }
  225. # This method will replace the template & return
  226. sub getParams {
  227. my ($self, $command, $args) = @_;
  228. if (!(defined $args->{'session_id'})) {
  229. return;
  230. }
  231. my $data = {};
  232. # TT does lexical template replacement, so we need exact name of the vars.
  233. my $session_id = $args->{'session_id'};
  234. my $context = (defined $args->{'context'}) ? $args->{'context'} : 'context';
  235. my $id = $args->{'id'};
  236. my $name = $args->{'name'};
  237. my $using = $args->{'using'};
  238. $data->{'method'} = $self->{$command}->{'method'};
  239. $data->{'url'} = tt $self->{$command}->{'url'};
  240. return $data;
  241. }
  242. 1;
  243. __END__
  244. =head1 SEE ALSO
  245. For more information about Selenium , visit the website at
  246. L<http://code.google.com/p/selenium/>.
  247. =head1 BUGS
  248. The Selenium issue tracking system is available online at
  249. L<http://code.google.com/p/selenium/issues/list>.
  250. =head1 AUTHOR
  251. Perl Bindings for Remote Driver by Aditya Ivaturi <ivaturi@gmail.com>
  252. =head1 LICENSE
  253. Copyright (c) 2010 Juniper Networks, Inc
  254. Licensed under the Apache License, Version 2.0 (the "License");
  255. you may not use this file except in compliance with the License.
  256. You may obtain a copy of the License at
  257. http://www.apache.org/licenses/LICENSE-2.0
  258. Unless required by applicable law or agreed to in writing, software
  259. distributed under the License is distributed on an "AS IS" BASIS,
  260. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  261. See the License for the specific language governing permissions and
  262. limitations under the License.