summaryrefslogtreecommitdiff
path: root/tests/selenium/Selenium.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/selenium/Selenium.php')
-rw-r--r--tests/selenium/Selenium.php191
1 files changed, 191 insertions, 0 deletions
diff --git a/tests/selenium/Selenium.php b/tests/selenium/Selenium.php
new file mode 100644
index 00000000..07f98671
--- /dev/null
+++ b/tests/selenium/Selenium.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Selenium connector
+ * This is implemented as a singleton.
+ */
+
+require( 'Testing/Selenium.php' );
+
+class Selenium {
+ protected static $_instance = null;
+
+ public $isStarted = false;
+ public $tester;
+
+ protected $port;
+ protected $host;
+ protected $browser;
+ protected $browsers;
+ protected $logger;
+ protected $user;
+ protected $pass;
+ protected $timeout = 30000;
+ protected $verbose;
+ protected $junitlogfile; //processed by phpUnderControl
+ protected $runagainstgrid = false;
+
+ /**
+ * @todo this shouldn't have to be static
+ */
+ static protected $url;
+
+ /**
+ * Override parent
+ */
+ public function __construct() {
+ /**
+ * @todo this is an ugly hack to make information available to
+ * other tests. It should be fixed.
+ */
+ if ( null === self::$_instance ) {
+ self::$_instance = $this;
+ } else {
+ throw new MWException( "Already have one Selenium instance." );
+ }
+ }
+
+ public function start() {
+ $this->tester = new Testing_Selenium( $this->browser, self::$url, $this->host,
+ $this->port, $this->timeout );
+ if ( method_exists( $this->tester, "setVerbose" ) ) {
+ $this->tester->setVerbose( $this->verbose );
+ }
+
+ $this->tester->start();
+ $this->isStarted = true;
+ }
+
+ public function stop() {
+ $this->tester->stop();
+ $this->tester = null;
+ $this->isStarted = false;
+ }
+
+ public function login() {
+ if ( strlen( $this->user ) == 0 ) {
+ return;
+ }
+ $this->open( self::$url . '/index.php?title=Special:Userlogin' );
+ $this->type( 'wpName1', $this->user );
+ $this->type( 'wpPassword1', $this->pass );
+ $this->click( "//input[@id='wpLoginAttempt']" );
+ $this->waitForPageToLoad( 10000 );
+
+ // after login we redirect to the main page. So check whether the "Prefernces" top menu item exists
+ $value = $this->isElementPresent( "//li[@id='pt-preferences']" );
+
+ if ( $value != true ) {
+ throw new Testing_Selenium_Exception( "Login Failed" );
+ }
+
+ }
+
+ public static function getInstance() {
+ if ( null === self::$_instance ) {
+ throw new MWException( "No instance set yet" );
+ }
+
+ return self::$_instance;
+ }
+
+ public function loadPage( $title, $action ) {
+ $this->open( self::$url . '/index.php?title=' . $title . '&action=' . $action );
+ }
+
+ public function setLogger( $logger ) {
+ $this->logger = $logger;
+ }
+
+ public function getLogger() {
+ return $this->logger;
+ }
+
+ public function log( $message ) {
+ $this->logger->write( $message );
+ }
+
+ public function setUrl( $url ) {
+ self::$url = $url;
+ }
+
+ public static function getUrl() {
+ return self::$url;
+ }
+
+ public function setPort( $port ) {
+ $this->port = $port;
+ }
+
+ public function getPort() {
+ return $this->port;
+ }
+
+ public function setUser( $user ) {
+ $this->user = $user;
+ }
+
+ // Function to get username
+ public function getUser() {
+ return $this->user;
+ }
+
+
+ public function setPass( $pass ) {
+ $this->pass = $pass;
+ }
+
+ //add function to get password
+ public function getPass() {
+ return $this->pass;
+ }
+
+ public function setHost( $host ) {
+ $this->host = $host;
+ }
+
+ public function setVerbose( $verbose ) {
+ $this->verbose = $verbose;
+ }
+
+ public function setAvailableBrowsers( $availableBrowsers ) {
+ $this->browsers = $availableBrowsers;
+ }
+
+ public function setJUnitLogfile( $junitlogfile ) {
+ $this->junitlogfile = $junitlogfile;
+ }
+
+ public function getJUnitLogfile() {
+ return $this->junitlogfile;
+ }
+
+ public function setRunAgainstGrid( $runagainstgrid ) {
+ $this->runagainstgrid = $runagainstgrid;
+ }
+
+ public function setBrowser( $b ) {
+ if ( $this->runagainstgrid ) {
+ $this->browser = $b;
+ return true;
+ }
+ if ( !isset( $this->browsers[$b] ) ) {
+ throw new MWException( "Invalid Browser: $b.\n" );
+ }
+
+ $this->browser = $this->browsers[$b];
+ }
+
+ public function getAvailableBrowsers() {
+ return $this->browsers;
+ }
+
+ public function __call( $name, $args ) {
+ $t = call_user_func_array( array( $this->tester, $name ), $args );
+ return $t;
+ }
+
+ // Prevent external cloning
+ protected function __clone() {}
+ // Prevent external construction
+ // protected function __construct() {}
+}