/
opt
/
alt
/
php54
/
usr
/
share
/
pear
/
PHPUnit
/
Extensions
/
Upload Filee
HOME
<?php /** * PHPUnit * * Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Sebastian Bergmann nor the names of his * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package PHPUnit_Selenium * @author Sebastian Bergmann <sebastian@phpunit.de> * @copyright 2010-2013 Sebastian Bergmann <sebastian@phpunit.de> * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License * @link http://www.phpunit.de/ * @since File available since Release 1.0.0 */ /** * TestCase class that uses Selenium to provide * the functionality required for web testing. * * @package PHPUnit_Selenium * @author Sebastian Bergmann <sebastian@phpunit.de> * @copyright 2010-2013 Sebastian Bergmann <sebastian@phpunit.de> * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License * @version Release: 1.3.3 * @link http://www.phpunit.de/ * @since Class available since Release 1.0.0 * * @method unknown addLocationStrategy() * @method unknown addLocationStrategyAndWait() * @method unknown addScript() * @method unknown addScriptAndWait() * @method unknown addSelection() * @method unknown addSelectionAndWait() * @method unknown allowNativeXpath() * @method unknown allowNativeXpathAndWait() * @method unknown altKeyDown() * @method unknown altKeyDownAndWait() * @method unknown altKeyUp() * @method unknown altKeyUpAndWait() * @method unknown answerOnNextPrompt() * @method unknown assignId() * @method unknown assignIdAndWait() * @method unknown assertAlert * @method unknown assertAlertNotPresent * @method unknown assertAlertPresent * @method unknown assertAllButtons * @method unknown assertAllFields * @method unknown assertAllLinks * @method unknown assertAllWindowIds * @method unknown assertAllWindowNames * @method unknown assertAllWindowTitles * @method unknown assertAttribute * @method unknown assertAttributeFromAllWindows * @method unknown assertBodyText * @method unknown assertChecked * @method unknown assertConfirmation * @method unknown assertConfirmationNotPresent * @method unknown assertConfirmationPresent * @method unknown assertCookie * @method unknown assertCookieByName * @method unknown assertCookieNotPresent * @method unknown assertCookiePresent * @method unknown assertCssCount * @method unknown assertCursorPosition * @method unknown assertEditable * @method unknown assertElementHeight * @method unknown assertElementIndex * @method unknown assertElementNotPresent * @method unknown assertElementPositionLeft * @method unknown assertElementPositionTop * @method unknown assertElementPresent * @method unknown assertElementWidth * @method unknown assertEval * @method unknown assertExpression * @method unknown assertHtmlSource * @method unknown assertLocation * @method unknown assertLogMessages * @method unknown assertMouseSpeed * @method unknown assertNotAlert * @method unknown assertNotAllButtons * @method unknown assertNotAllFields * @method unknown assertNotAllLinks * @method unknown assertNotAllWindowIds * @method unknown assertNotAllWindowNames * @method unknown assertNotAllWindowTitles * @method unknown assertNotAttribute * @method unknown assertNotAttributeFromAllWindows * @method unknown assertNotBodyText * @method unknown assertNotChecked * @method unknown assertNotConfirmation * @method unknown assertNotCookie * @method unknown assertNotCookieByName * @method unknown assertNotCssCount * @method unknown assertNotCursorPosition * @method unknown assertNotEditable * @method unknown assertNotElementHeight * @method unknown assertNotElementIndex * @method unknown assertNotElementPositionLeft * @method unknown assertNotElementPositionTop * @method unknown assertNotElementWidth * @method unknown assertNotEval * @method unknown assertNotExpression * @method unknown assertNotHtmlSource * @method unknown assertNotLocation * @method unknown assertNotLogMessages * @method unknown assertNotMouseSpeed * @method unknown assertNotOrdered * @method unknown assertNotPrompt * @method unknown assertNotSelectOptions * @method unknown assertNotSelectedId * @method unknown assertNotSelectedIds * @method unknown assertNotSelectedIndex * @method unknown assertNotSelectedIndexes * @method unknown assertNotSelectedLabel * @method unknown assertNotSelectedLabels * @method unknown assertNotSelectedValue * @method unknown assertNotSelectedValues * @method unknown assertNotSomethingSelected * @method unknown assertNotSpeed * @method unknown assertNotSpeedAndWait * @method unknown assertNotTable * @method unknown assertNotText * @method unknown assertNotTitle * @method unknown assertNotValue * @method unknown assertNotVisible * @method unknown assertNotWhetherThisFrameMatchFrameExpression * @method unknown assertNotWhetherThisWindowMatchWindowExpression * @method unknown assertNotXpathCount * @method unknown assertOrdered * @method unknown assertPrompt * @method unknown assertPromptNotPresent * @method unknown assertPromptPresent * @method unknown assertSelectOptions * @method unknown assertSelectedId * @method unknown assertSelectedIds * @method unknown assertSelectedIndex * @method unknown assertSelectedIndexes * @method unknown assertSelectedLabel * @method unknown assertSelectedLabels * @method unknown assertSelectedValue * @method unknown assertSelectedValues * @method unknown assertSomethingSelected * @method unknown assertSpeed * @method unknown assertSpeedAndWait * @method unknown assertTable * @method unknown assertText * @method unknown assertTextNotPresent * @method unknown assertTextPresent * @method unknown assertTitle * @method unknown assertValue * @method unknown assertVisible * @method unknown assertWhetherThisFrameMatchFrameExpression * @method unknown assertWhetherThisWindowMatchWindowExpression * @method unknown assertXpathCount * @method unknown attachFile() * @method unknown break() * @method unknown captureEntirePageScreenshot() * @method unknown captureEntirePageScreenshotAndWait() * @method unknown captureEntirePageScreenshotToStringAndWait() * @method unknown captureScreenshotAndWait() * @method unknown captureScreenshotToStringAndWait() * @method unknown check() * @method unknown checkAndWait() * @method unknown chooseCancelOnNextConfirmation() * @method unknown chooseCancelOnNextConfirmationAndWait() * @method unknown chooseOkOnNextConfirmation() * @method unknown chooseOkOnNextConfirmationAndWait() * @method unknown click() * @method unknown clickAndWait() * @method unknown clickAt() * @method unknown clickAtAndWait() * @method unknown close() * @method unknown contextMenu() * @method unknown contextMenuAndWait() * @method unknown contextMenuAt() * @method unknown contextMenuAtAndWait() * @method unknown controlKeyDown() * @method unknown controlKeyDownAndWait() * @method unknown controlKeyUp() * @method unknown controlKeyUpAndWait() * @method unknown createCookie() * @method unknown createCookieAndWait() * @method unknown deleteAllVisibleCookies() * @method unknown deleteAllVisibleCookiesAndWait() * @method unknown deleteCookie() * @method unknown deleteCookieAndWait() * @method unknown deselectPopUp() * @method unknown deselectPopUpAndWait() * @method unknown doubleClick() * @method unknown doubleClickAndWait() * @method unknown doubleClickAt() * @method unknown doubleClickAtAndWait() * @method unknown dragAndDrop() * @method unknown dragAndDropAndWait() * @method unknown dragAndDropToObject() * @method unknown dragAndDropToObjectAndWait() * @method unknown dragDrop() * @method unknown dragDropAndWait() * @method unknown echo() * @method unknown fireEvent() * @method unknown fireEventAndWait() * @method unknown focus() * @method unknown focusAndWait() * @method string getAlert() * @method array getAllButtons() * @method array getAllFields() * @method array getAllLinks() * @method array getAllWindowIds() * @method array getAllWindowNames() * @method array getAllWindowTitles() * @method string getAttribute() * @method array getAttributeFromAllWindows() * @method string getBodyText() * @method string getConfirmation() * @method string getCookie() * @method string getCookieByName() * @method integer getCursorPosition() * @method integer getElementHeight() * @method integer getElementIndex() * @method integer getElementPositionLeft() * @method integer getElementPositionTop() * @method integer getElementWidth() * @method string getEval() * @method string getExpression() * @method string getHtmlSource() * @method string getLocation() * @method string getLogMessages() * @method integer getMouseSpeed() * @method string getPrompt() * @method array getSelectOptions() * @method string getSelectedId() * @method array getSelectedIds() * @method string getSelectedIndex() * @method array getSelectedIndexes() * @method string getSelectedLabel() * @method array getSelectedLabels() * @method string getSelectedValue() * @method array getSelectedValues() * @method unknown getSpeed() * @method unknown getSpeedAndWait() * @method string getTable() * @method string getText() * @method string getTitle() * @method string getValue() * @method boolean getWhetherThisFrameMatchFrameExpression() * @method boolean getWhetherThisWindowMatchWindowExpression() * @method integer getXpathCount() * @method unknown goBack() * @method unknown goBackAndWait() * @method unknown highlight() * @method unknown highlightAndWait() * @method unknown ignoreAttributesWithoutValue() * @method unknown ignoreAttributesWithoutValueAndWait() * @method boolean isAlertPresent() * @method boolean isChecked() * @method boolean isConfirmationPresent() * @method boolean isCookiePresent() * @method boolean isEditable() * @method boolean isElementPresent() * @method boolean isOrdered() * @method boolean isPromptPresent() * @method boolean isSomethingSelected() * @method boolean isTextPresent() * @method boolean isVisible() * @method unknown keyDown() * @method unknown keyDownAndWait() * @method unknown keyDownNative() * @method unknown keyDownNativeAndWait() * @method unknown keyPress() * @method unknown keyPressAndWait() * @method unknown keyPressNative() * @method unknown keyPressNativeAndWait() * @method unknown keyUp() * @method unknown keyUpAndWait() * @method unknown keyUpNative() * @method unknown keyUpNativeAndWait() * @method unknown metaKeyDown() * @method unknown metaKeyDownAndWait() * @method unknown metaKeyUp() * @method unknown metaKeyUpAndWait() * @method unknown mouseDown() * @method unknown mouseDownAndWait() * @method unknown mouseDownAt() * @method unknown mouseDownAtAndWait() * @method unknown mouseMove() * @method unknown mouseMoveAndWait() * @method unknown mouseMoveAt() * @method unknown mouseMoveAtAndWait() * @method unknown mouseOut() * @method unknown mouseOutAndWait() * @method unknown mouseOver() * @method unknown mouseOverAndWait() * @method unknown mouseUp() * @method unknown mouseUpAndWait() * @method unknown mouseUpAt() * @method unknown mouseUpAtAndWait() * @method unknown mouseUpRight() * @method unknown mouseUpRightAndWait() * @method unknown mouseUpRightAt() * @method unknown mouseUpRightAtAndWait() * @method unknown open() * @method unknown openWindow() * @method unknown openWindowAndWait() * @method unknown pause() * @method unknown refresh() * @method unknown refreshAndWait() * @method unknown removeAllSelections() * @method unknown removeAllSelectionsAndWait() * @method unknown removeScript() * @method unknown removeScriptAndWait() * @method unknown removeSelection() * @method unknown removeSelectionAndWait() * @method unknown retrieveLastRemoteControlLogs() * @method unknown rollup() * @method unknown rollupAndWait() * @method unknown runScript() * @method unknown runScriptAndWait() * @method unknown select() * @method unknown selectAndWait() * @method unknown selectFrame() * @method unknown selectPopUp() * @method unknown selectPopUpAndWait() * @method unknown selectWindow() * @method unknown setBrowserLogLevel() * @method unknown setBrowserLogLevelAndWait() * @method unknown setContext() * @method unknown setCursorPosition() * @method unknown setCursorPositionAndWait() * @method unknown setMouseSpeed() * @method unknown setMouseSpeedAndWait() * @method unknown setSpeed() * @method unknown setSpeedAndWait() * @method unknown shiftKeyDown() * @method unknown shiftKeyDownAndWait() * @method unknown shiftKeyUp() * @method unknown shiftKeyUpAndWait() * @method unknown shutDownSeleniumServer() * @method unknown store() * @method unknown submit() * @method unknown submitAndWait() * @method unknown type() * @method unknown typeAndWait() * @method unknown typeKeys() * @method unknown typeKeysAndWait() * @method unknown uncheck() * @method unknown uncheckAndWait() * @method unknown useXpathLibrary() * @method unknown useXpathLibraryAndWait() * @method unknown waitForAlert * @method unknown waitForAlertNotPresent * @method unknown waitForAlertPresent * @method unknown waitForAllButtons * @method unknown waitForAllFields * @method unknown waitForAllLinks * @method unknown waitForAllWindowIds * @method unknown waitForAllWindowNames * @method unknown waitForAllWindowTitles * @method unknown waitForAttribute * @method unknown waitForAttributeFromAllWindows * @method unknown waitForBodyText * @method unknown waitForChecked * @method unknown waitForCondition() * @method unknown waitForConfirmation * @method unknown waitForConfirmationNotPresent * @method unknown waitForConfirmationPresent * @method unknown waitForCookie * @method unknown waitForCookieByName * @method unknown waitForCookieNotPresent * @method unknown waitForCookiePresent * @method unknown waitForCssCount * @method unknown waitForCursorPosition * @method unknown waitForEditable * @method unknown waitForElementHeight * @method unknown waitForElementIndex * @method unknown waitForElementNotPresent * @method unknown waitForElementPositionLeft * @method unknown waitForElementPositionTop * @method unknown waitForElementPresent * @method unknown waitForElementWidth * @method unknown waitForEval * @method unknown waitForExpression * @method unknown waitForHtmlSource * @method unknown waitForLocation * @method unknown waitForLogMessages * @method unknown waitForMouseSpeed * @method unknown waitForNotAlert * @method unknown waitForNotAllButtons * @method unknown waitForNotAllFields * @method unknown waitForNotAllLinks * @method unknown waitForNotAllWindowIds * @method unknown waitForNotAllWindowNames * @method unknown waitForNotAllWindowTitles * @method unknown waitForNotAttribute * @method unknown waitForNotAttributeFromAllWindows * @method unknown waitForNotBodyText * @method unknown waitForNotChecked * @method unknown waitForNotConfirmation * @method unknown waitForNotCookie * @method unknown waitForNotCookieByName * @method unknown waitForNotCssCount * @method unknown waitForNotCursorPosition * @method unknown waitForNotEditable * @method unknown waitForNotElementHeight * @method unknown waitForNotElementIndex * @method unknown waitForNotElementPositionLeft * @method unknown waitForNotElementPositionTop * @method unknown waitForNotElementWidth * @method unknown waitForNotEval * @method unknown waitForNotExpression * @method unknown waitForNotHtmlSource * @method unknown waitForNotLocation * @method unknown waitForNotLogMessages * @method unknown waitForNotMouseSpeed * @method unknown waitForNotOrdered * @method unknown waitForNotPrompt * @method unknown waitForNotSelectOptions * @method unknown waitForNotSelectedId * @method unknown waitForNotSelectedIds * @method unknown waitForNotSelectedIndex * @method unknown waitForNotSelectedIndexes * @method unknown waitForNotSelectedLabel * @method unknown waitForNotSelectedLabels * @method unknown waitForNotSelectedValue * @method unknown waitForNotSelectedValues * @method unknown waitForNotSomethingSelected * @method unknown waitForNotSpeed * @method unknown waitForNotSpeedAndWait * @method unknown waitForNotTable * @method unknown waitForNotText * @method unknown waitForNotTitle * @method unknown waitForNotValue * @method unknown waitForNotVisible * @method unknown waitForNotWhetherThisFrameMatchFrameExpression * @method unknown waitForNotWhetherThisWindowMatchWindowExpression * @method unknown waitForNotXpathCount * @method unknown waitForOrdered * @method unknown waitForPageToLoad() * @method unknown waitForPopUp() * @method unknown waitForPrompt * @method unknown waitForPromptNotPresent * @method unknown waitForPromptPresent * @method unknown waitForSelectOptions * @method unknown waitForSelectedId * @method unknown waitForSelectedIds * @method unknown waitForSelectedIndex * @method unknown waitForSelectedIndexes * @method unknown waitForSelectedLabel * @method unknown waitForSelectedLabels * @method unknown waitForSelectedValue * @method unknown waitForSelectedValues * @method unknown waitForSomethingSelected * @method unknown waitForSpeed * @method unknown waitForSpeedAndWait * @method unknown waitForTable * @method unknown waitForText * @method unknown waitForTextNotPresent * @method unknown waitForTextPresent * @method unknown waitForTitle * @method unknown waitForValue * @method unknown waitForVisible * @method unknown waitForWhetherThisFrameMatchFrameExpression * @method unknown waitForWhetherThisWindowMatchWindowExpression * @method unknown waitForXpathCount * @method unknown windowFocus() * @method unknown windowMaximize() */ abstract class PHPUnit_Extensions_SeleniumTestCase extends PHPUnit_Framework_TestCase { /** * @var array */ public static $browsers = array(); /** * @var string */ protected $browserName; /** * @var boolean */ protected $collectCodeCoverageInformation = FALSE; /** * @var string */ protected $coverageScriptUrl = ''; /** * @var PHPUnit_Extensions_SeleniumTestCase_Driver[] */ protected $drivers = array(); /** * @var boolean */ protected $inDefaultAssertions = FALSE; /** * @var string */ protected $testId; /** * @var array * @access protected */ protected $verificationErrors = array(); /** * @var boolean */ protected $captureScreenshotOnFailure = FALSE; /** * @var string */ protected $screenshotPath = ''; /** * @var string */ protected $screenshotUrl = ''; /** * @var integer the number of seconds to wait before declaring * the Selenium server not reachable */ protected $serverConnectionTimeOut = 10; /** * @var boolean */ private $serverRunning; /** * @var boolean */ private static $shareSession; /** * The last sessionId used for running a test. * @var string */ private static $sessionId; /** * @param boolean */ public static function shareSession($shareSession) { self::$shareSession = $shareSession; } /** * @param string $name * @param array $data * @param string $dataName * @param array $browser * @throws InvalidArgumentException */ public function __construct($name = NULL, array $data = array(), $dataName = '', array $browser = array()) { parent::__construct($name, $data, $dataName); $this->testId = md5(uniqid(rand(), TRUE)); $this->getDriver($browser); } public function setupSpecificBrowser(array $browser) { $this->getDriver($browser); } /** * Stops any shared session still open at the end of the current * PHPUnit process. */ public function __destruct() { $this->stopSession(); } /** * @param string $className * @return PHPUnit_Framework_TestSuite */ public static function suite($className) { return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); } /** * Runs the test case and collects the results in a TestResult object. * If no TestResult object is passed a new one will be created. * * @param PHPUnit_Framework_TestResult $result * @return PHPUnit_Framework_TestResult * @throws InvalidArgumentException */ public function run(PHPUnit_Framework_TestResult $result = NULL) { if ($result === NULL) { $result = $this->createResult(); } $this->collectCodeCoverageInformation = $result->getCollectCodeCoverageInformation(); foreach ($this->drivers as $driver) { $driver->setCollectCodeCoverageInformation( $this->collectCodeCoverageInformation ); } parent::run($result); if ($this->collectCodeCoverageInformation) { $result->getCodeCoverage()->append( $this->getCodeCoverage(), $this ); } return $result; } /** * @param array $browser * @return PHPUnit_Extensions_SeleniumTestCase_Driver */ protected function getDriver(array $browser) { if (isset($browser['name'])) { if (!is_string($browser['name'])) { throw new InvalidArgumentException( 'Array element "name" is no string.' ); } } else { $browser['name'] = ''; } if (isset($browser['browser'])) { if (!is_string($browser['browser'])) { throw new InvalidArgumentException( 'Array element "browser" is no string.' ); } } else { $browser['browser'] = ''; } if (isset($browser['host'])) { if (!is_string($browser['host'])) { throw new InvalidArgumentException( 'Array element "host" is no string.' ); } } else { $browser['host'] = 'localhost'; } if (isset($browser['port'])) { if (!is_int($browser['port'])) { throw new InvalidArgumentException( 'Array element "port" is no integer.' ); } } else { $browser['port'] = 4444; } if (isset($browser['timeout'])) { if (!is_int($browser['timeout'])) { throw new InvalidArgumentException( 'Array element "timeout" is no integer.' ); } } else { $browser['timeout'] = 30; } if (isset($browser['httpTimeout'])) { if (!is_int($browser['httpTimeout'])) { throw new InvalidArgumentException( 'Array element "httpTimeout" is no integer.' ); } } else { $browser['httpTimeout'] = 45; } $driver = new PHPUnit_Extensions_SeleniumTestCase_Driver; $driver->setName($browser['name']); $driver->setBrowser($browser['browser']); $driver->setHost($browser['host']); $driver->setPort($browser['port']); $driver->setTimeout($browser['timeout']); $driver->setHttpTimeout($browser['httpTimeout']); $driver->setTestCase($this); $driver->setTestId($this->testId); $this->drivers[0] = $driver; return $driver; } public function skipWithNoServerRunning() { try { fsockopen($this->drivers[0]->getHost(), $this->drivers[0]->getPort(), $errno, $errstr, $this->serverConnectionTimeOut); $this->serverRunning = TRUE; } catch (PHPUnit_Framework_Error_Warning $e) { $this->markTestSkipped( sprintf( 'Could not connect to the Selenium Server on %s:%d.', $this->drivers[0]->getHost(), $this->drivers[0]->getPort() ) ); $this->serverRunning = FALSE; } } /** * @return string */ protected function prepareTestSession() { $testCaseClassVars = get_class_vars(get_class($this)); if ($testCaseClassVars['browsers']) { return $this->start(); } if (self::$shareSession && self::$sessionId !== NULL) { $this->setSessionId(self::$sessionId); $this->selectWindow('null'); } else { self::$sessionId = $this->start(); } return self::$sessionId; } /** * @throws RuntimeException */ protected function runTest() { $this->skipWithNoServerRunning(); $this->prepareTestSession(); if (!is_file($this->getName(FALSE))) { $result = parent::runTest(); } else { $this->runSelenese($this->getName(FALSE)); $result = NULL; } if (!empty($this->verificationErrors)) { $this->fail(implode("\n", $this->verificationErrors)); } if (!self::$shareSession) { $this->stopSession(); } return $result; } private function stopSession() { try { $this->stop(); } catch (RuntimeException $e) { } } /** * Returns a string representation of the test case. * * @return string */ public function toString() { $buffer = parent::toString(); if (!empty($this->browserName)) { $buffer .= ' with browser ' . $this->browserName; } return $buffer; } /** * Runs a test from a Selenese (HTML) specification. * * @param string $filename */ public function runSelenese($filename) { $document = PHPUnit_Util_XML::loadFile($filename, TRUE); $xpath = new DOMXPath($document); $rows = $xpath->query('body/table/tbody/tr'); foreach ($rows as $row) { $action = NULL; $arguments = array(); $columns = $xpath->query('td', $row); foreach ($columns as $column) { if ($action === NULL) { $action = PHPUnit_Util_XML::nodeToText($column); } else { $arguments[] = PHPUnit_Util_XML::nodeToText($column); } } if (method_exists($this, $action)) { call_user_func_array(array($this, $action), $arguments); } else { $this->__call($action, $arguments); } } } /** * Delegate method calls to the driver. * * @param string $command * @param array $arguments * @return mixed */ public function __call($command, $arguments) { $result = call_user_func_array( array($this->drivers[0], $command), $arguments ); $this->verificationErrors = array_merge( $this->verificationErrors, $this->drivers[0]->getVerificationErrors() ); $this->drivers[0]->clearVerificationErrors(); return $result; } /** * Asserts that an element's value is equal to a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementValueEquals($locator, $text, $message = '') { $this->assertEquals($text, $this->getValue($locator), $message); } /** * Asserts that an element's value is not equal to a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementValueNotEquals($locator, $text, $message = '') { $this->assertNotEquals($text, $this->getValue($locator), $message); } /** * Asserts that an element's value contains a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementValueContains($locator, $text, $message = '') { $this->assertContains($text, $this->getValue($locator), $message); } /** * Asserts that an element's value does not contain a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementValueNotContains($locator, $text, $message = '') { $this->assertNotContains($text, $this->getValue($locator), $message); } /** * Asserts that an element contains a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementContainsText($locator, $text, $message = '') { $this->assertContains($text, $this->getText($locator), $message); } /** * Asserts that an element does not contain a given string. * * @param string $locator * @param string $text * @param string $message */ public function assertElementNotContainsText($locator, $text, $message = '') { $this->assertNotContains($text, $this->getText($locator), $message); } /** * Asserts that a select element has a specific option. * * @param string $selectLocator * @param string $option * @param string $message */ public function assertSelectHasOption($selectLocator, $option, $message = '') { $this->assertContains($option, $this->getSelectOptions($selectLocator), $message); } /** * Asserts that a select element does not have a specific option. * * @param string $selectLocator * @param string $option * @param string $message */ public function assertSelectNotHasOption($selectLocator, $option, $message = '') { $this->assertNotContains($option, $this->getSelectOptions($selectLocator), $message); } /** * Asserts that a specific label is selected. * * @param string $selectLocator * @param string $value * @param string $message */ public function assertSelected($selectLocator, $option, $message = '') { if ($message == '') { $message = sprintf( 'Label "%s" not selected in "%s".', $option, $selectLocator ); } $this->assertEquals( $option, $this->getSelectedLabel($selectLocator), $message ); } /** * Asserts that a specific label is not selected. * * @param string $selectLocator * @param string $value * @param string $message */ public function assertNotSelected($selectLocator, $option, $message = '') { if ($message == '') { $message = sprintf( 'Label "%s" selected in "%s".', $option, $selectLocator ); } $this->assertNotEquals( $option, $this->getSelectedLabel($selectLocator), $message ); } /** * Asserts that a specific value is selected. * * @param string $selectLocator * @param string $value * @param string $message */ public function assertIsSelected($selectLocator, $value, $message = '') { if ($message == '') { $message = sprintf( 'Value "%s" not selected in "%s".', $value, $selectLocator ); } $this->assertEquals( $value, $this->getSelectedValue($selectLocator), $message ); } /** * Asserts that a specific value is not selected. * * @param string $selectLocator * @param string $value * @param string $message */ public function assertIsNotSelected($selectLocator, $value, $message = '') { if ($message == '') { $message = sprintf( 'Value "%s" selected in "%s".', $value, $selectLocator ); } $this->assertNotEquals( $value, $this->getSelectedValue($selectLocator), $message ); } /** * Template Method that is called after Selenium actions. * * @param string $action */ protected function defaultAssertions($action) { } /** * @return array */ protected function getCodeCoverage() { $coverage = new PHPUnit_Extensions_SeleniumCommon_RemoteCoverage( $this->coverageScriptUrl, $this->testId ); return $coverage->get(); } /** * @param string $action */ public function runDefaultAssertions($action) { if (!$this->inDefaultAssertions) { $this->inDefaultAssertions = TRUE; $this->defaultAssertions($action); $this->inDefaultAssertions = FALSE; } } /** * This method is called when a test method did not execute successfully. * * @param Exception $e */ protected function onNotSuccessfulTest(Exception $e) { if (!$this->serverRunning) { throw $e; } try { $this->restoreSessionStateAfterFailedTest(); $buffer = ''; if ($this->captureScreenshotOnFailure) { $buffer .= 'Current URL: ' . $this->drivers[0]->getLocation() . "\n"; $screenshotInfo = $this->takeScreenshot(); if ($screenshotInfo != '') { $buffer .= $screenshotInfo; } } $this->stopSession(); } catch (Exception $another) { $buffer = "Issues while capturing the screenshot:\n" . $another->getMessage(); } if ($e instanceof PHPUnit_Framework_ExpectationFailedException && is_object($e->getComparisonFailure())) { $message = $e->getComparisonFailure()->toString(); } else { $message = $e->getMessage(); } $buffer .= "\n" . $message; // gain the screenshot path, lose the stack trace if ($this->captureScreenshotOnFailure) { throw new PHPUnit_Framework_Error($buffer, $e->getCode(), $e->getFile(), $e->getLine(), $e); } // yes to stack trace and everything if ($e instanceof PHPUnit_Framework_IncompleteTestError || $e instanceof PHPUnit_Framework_SkippedTestError || $e instanceof PHPUnit_Framework_AssertionFailedError) { throw $e; } // yes to stack trace, only for F tests // PHPUnit issue 471 prevents getTrace() from being useful throw new PHPUnit_Framework_Error($buffer, $e->getCode(), $e->getFile(), $e->getLine(), $e); } private function restoreSessionStateAfterFailedTest() { self::$sessionId = NULL; } /** * Returns correct path to screenshot save path. * * @return string */ protected function getScreenshotPath() { $path = $this->screenshotPath; if (!in_array(substr($path, strlen($path) -1, 1), array("/","\\"))) { $path .= DIRECTORY_SEPARATOR; } return $path; } /** * Take a screenshot and return information about it. * Return an empty string if the screenshotPath and screenshotUrl * properties are empty. * Issue #88. * * @access protected * @return string */ protected function takeScreenshot() { if (!empty($this->screenshotPath) && !empty($this->screenshotUrl)) { $filename = $this->getScreenshotPath() . $this->testId . '.png'; $this->drivers[0]->captureEntirePageScreenshot($filename); return 'Screenshot: ' . $this->screenshotUrl . '/' . $this->testId . ".png\n"; } else { return ''; } } /** * Pause support for runSelenese() HTML cases * @param $milliseconds */ protected function pause($milliseconds) { sleep(round($milliseconds/1000)); } }