123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
-
-
-
- /**
- *
- * Based on the Domain51_Testing_Selenium class available at
- * http://domain51.googlecode.com/svn/Domain51/trunk/
- *
- * @author Travis Swicegood <development [at] domain51 [dot] com>
- *
- */
- class SimpleSeleniumRemoteControl
- {
- private $_browser = '';
- private $_browserUrl = '';
- private $_host = 'localhost';
- private $_port = 4444;
- private $_timeout = 30000;
- private $_sessionId = null;
-
- private $_commandMap = array(
- 'bool' => array(
- 'verify',
- 'verifyTextPresent',
- 'verifyTextNotPresent',
- 'verifyValue'
- ),
- 'string' => array(
- 'getNewBrowserSession',
- ),
- );
-
- public function __construct($browser, $browserUrl, $host = 'localhost', $port = 4444, $timeout = 30000) {
- $this->_browser = $browser;
- $this->_browserUrl = $browserUrl;
- $this->_host = $host;
- $this->_port = $port;
- $this->_timeout = $timeout;
- }
-
- public function sessionIdParser($response) {
- return substr($response, 3);
- }
-
- public function start() {
- $response = $this->cmd('getNewBrowserSession', array($this->_browser, $this->_browserUrl));
- $this->_sessionId = $this->sessionIdParser($response);
- }
-
- public function stop() {
- $this->cmd('testComplete');
- $this->_sessionId = null;
- }
-
- public function __call($method, $arguments) {
- $response = $this->cmd($method, $arguments);
-
- foreach ($this->_commandMap as $type => $commands) {
- if (!in_array($method, $commands)) {
- continue;
- $type = null;
- }
- break;
- }
-
- switch ($type) {
- case 'bool' :
- return substr($response, 0, 2) == 'OK' ? true : false;
- break;
-
- case 'string' :
- default:
- return $response;
- }
- }
-
- private function _server() {
- return "http://{$this->_host}:{$this->_port}/selenium-server/driver/";
- }
-
- public function buildUrlCmd($method, $arguments = array()) {
- $params = array(
- 'cmd=' . urlencode($method),
- );
- $i = 1;
- foreach ($arguments as $param) {
- $params[] = $i++ . '=' . urlencode(trim($param));
- }
- if (isset($this->_sessionId)) {
- $params[] = 'sessionId=' . $this->_sessionId;
- }
-
- return $this->_server()."?".implode('&', $params);
- }
-
- public function cmd($method, $arguments = array()) {
- $url = $this->buildUrlCmd($method, $arguments);
- $response = $this->_sendRequest($url);
- return $response;
- }
-
- public function isUp() {
- return (bool)@fsockopen($this->_host, $this->_port, $errno, $errstr, 30);
- }
-
- private function _initCurl($url) {
- if (!function_exists('curl_init')) {
- throw new Exception('this code currently requires the curl extension');
- }
- if (!$ch = curl_init($url)) {
- throw new Exception('Unable to setup curl');
- }
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_TIMEOUT, floor($this->_timeout));
- return $ch;
- }
-
- private function _sendRequest($url) {
- $ch = $this->_initCurl($url);
- $result = curl_exec($ch);
- if (($errno = curl_errno($ch)) != 0) {
- throw new Exception('Curl returned non-null errno ' . $errno . ':' . curl_error($ch));
- }
- curl_close($ch);
- return $result;
- }
- }
|