summaryrefslogtreecommitdiff
path: root/tests/test_tools/simpletest/browser.php
diff options
context:
space:
mode:
authorxue <>2006-07-16 01:50:23 +0000
committerxue <>2006-07-16 01:50:23 +0000
commitaf68030fcf0c266300feb2c100149ecadef7d364 (patch)
tree76b7c8ad5d8227870b9ef10c3e7b92a36336b320 /tests/test_tools/simpletest/browser.php
parent4b78404c20490a615459267426ce9e6737bf4485 (diff)
Merge from 3.0 branch till 1264.
Diffstat (limited to 'tests/test_tools/simpletest/browser.php')
-rw-r--r--tests/test_tools/simpletest/browser.php397
1 files changed, 219 insertions, 178 deletions
diff --git a/tests/test_tools/simpletest/browser.php b/tests/test_tools/simpletest/browser.php
index 06e1b8d7..8e843b18 100644
--- a/tests/test_tools/simpletest/browser.php
+++ b/tests/test_tools/simpletest/browser.php
@@ -3,22 +3,25 @@
* Base include file for SimpleTest
* @package SimpleTest
* @subpackage WebTester
- * @version $Id: browser.php,v 1.141 2005/02/22 02:39:21 lastcraft Exp $
+ * @version $Id: browser.php,v 1.162 2006/02/05 01:07:49 lastcraft Exp $
*/
-
+
/**#@+
* include other SimpleTest class files
*/
- require_once(dirname(__FILE__) . '/options.php');
+ require_once(dirname(__FILE__) . '/simpletest.php');
require_once(dirname(__FILE__) . '/http.php');
require_once(dirname(__FILE__) . '/encoding.php');
require_once(dirname(__FILE__) . '/page.php');
+ require_once(dirname(__FILE__) . '/selector.php');
require_once(dirname(__FILE__) . '/frames.php');
require_once(dirname(__FILE__) . '/user_agent.php');
/**#@-*/
-
- define('DEFAULT_MAX_NESTED_FRAMES', 3);
-
+
+ if (!defined('DEFAULT_MAX_NESTED_FRAMES')) {
+ define('DEFAULT_MAX_NESTED_FRAMES', 3);
+ }
+
/**
* Browser history list.
* @package SimpleTest
@@ -27,7 +30,7 @@
class SimpleBrowserHistory {
protected $_sequence;
protected $_position;
-
+
/**
* Starts empty.
* @access public
@@ -36,7 +39,7 @@
$this->_sequence = array();
$this->_position = -1;
}
-
+
/**
* Test for no entries yet.
* @return boolean True if empty.
@@ -45,7 +48,7 @@
function _isEmpty() {
return ($this->_position == -1);
}
-
+
/**
* Test for being at the beginning.
* @return boolean True if first.
@@ -54,7 +57,7 @@
function _atBeginning() {
return ($this->_position == 0) && ! $this->_isEmpty();
}
-
+
/**
* Test for being at the last entry.
* @return boolean True if last.
@@ -63,36 +66,21 @@
function _atEnd() {
return ($this->_position + 1 >= count($this->_sequence)) && ! $this->_isEmpty();
}
-
+
/**
* Adds a successfully fetched page to the history.
- * @param string $method GET or POST.
* @param SimpleUrl $url URL of fetch.
- * @param SimpleFormEncoding $parameters Any post data with the fetch.
+ * @param SimpleEncoding $parameters Any post data with the fetch.
* @access public
*/
- function recordEntry($method, $url, $parameters) {
+ function recordEntry($url, $parameters) {
$this->_dropFuture();
array_push(
$this->_sequence,
- array('method' => $method, 'url' => $url, 'parameters' => $parameters));
+ array('url' => $url, 'parameters' => $parameters));
$this->_position++;
}
-
- /**
- * Last fetching method for current history
- * position.
- * @return string GET or POST for this point in
- * the history.
- * @access public
- */
- function getMethod() {
- if ($this->_isEmpty()) {
- return false;
- }
- return $this->_sequence[$this->_position]['method'];
- }
-
+
/**
* Last fully qualified URL for current history
* position.
@@ -105,7 +93,7 @@
}
return $this->_sequence[$this->_position]['url'];
}
-
+
/**
* Parameters of last fetch from current history
* position.
@@ -118,7 +106,7 @@
}
return $this->_sequence[$this->_position]['parameters'];
}
-
+
/**
* Step back one place in the history. Stops at
* the first page.
@@ -132,7 +120,7 @@
$this->_position--;
return true;
}
-
+
/**
* Step forward one place. If already at the
* latest entry then nothing will happen.
@@ -146,7 +134,7 @@
$this->_position++;
return true;
}
-
+
/**
* Ditches all future entries beyond the current
* point.
@@ -161,7 +149,7 @@
}
}
}
-
+
/**
* Simulated web browser. This is an aggregate of
* the user agent, the HTML parsing, request history
@@ -175,7 +163,7 @@
protected $_history;
protected $_ignore_frames;
protected $_maximum_nested_frames;
-
+
/**
* Starts with a fresh browser with no
* cookie or any other state information. The
@@ -186,33 +174,35 @@
function SimpleBrowser() {
$this->_user_agent = $this->_createUserAgent();
$this->_user_agent->useProxy(
- SimpleTestOptions::getDefaultProxy(),
- SimpleTestOptions::getDefaultProxyUsername(),
- SimpleTestOptions::getDefaultProxyPassword());
+ SimpleTest::getDefaultProxy(),
+ SimpleTest::getDefaultProxyUsername(),
+ SimpleTest::getDefaultProxyPassword());
$this->_page = new SimplePage();
$this->_history = $this->_createHistory();
$this->_ignore_frames = false;
$this->_maximum_nested_frames = DEFAULT_MAX_NESTED_FRAMES;
}
-
+
/**
* Creates the underlying user agent.
* @return SimpleFetcher Content fetcher.
* @access protected
*/
- function _createUserAgent() {
- return new SimpleUserAgent();
+ function &_createUserAgent() {
+ $user_agent = new SimpleUserAgent();
+ return $user_agent;
}
-
+
/**
* Creates a new empty history list.
* @return SimpleBrowserHistory New list.
* @access protected
*/
- function _createHistory() {
- return new SimpleBrowserHistory();
+ function &_createHistory() {
+ $history = new SimpleBrowserHistory();
+ return $history;
}
-
+
/**
* Disables frames support. Frames will not be fetched
* and the frameset page will be used instead.
@@ -221,7 +211,7 @@
function ignoreFrames() {
$this->_ignore_frames = true;
}
-
+
/**
* Enables frames support. Frames will be fetched from
* now on.
@@ -232,93 +222,122 @@
}
/**
+ * Switches off cookie sending and recieving.
+ * @access public
+ */
+ function ignoreCookies() {
+ $this->_user_agent->ignoreCookies();
+ }
+
+ /**
+ * Switches back on the cookie sending and recieving.
+ * @access public
+ */
+ function useCookies() {
+ $this->_user_agent->useCookies();
+ }
+
+ /**
* Parses the raw content into a page. Will load further
* frame pages unless frames are disabled.
* @param SimpleHttpResponse $response Response from fetch.
* @param integer $depth Nested frameset depth.
* @return SimplePage Parsed HTML.
- * @access protected
+ * @access private
*/
- function _parse($response, $depth = 0) {
- $builder = new SimplePageBuilder();
- $page = $builder->parse($response);
+ function &_parse($response, $depth = 0) {
+ $page = $this->_buildPage($response);
if ($this->_ignore_frames || ! $page->hasFrames() || ($depth > $this->_maximum_nested_frames)) {
return $page;
}
$frameset = new SimpleFrameset($page);
foreach ($page->getFrameset() as $key => $url) {
- $frame = $this->_fetch('GET', $url, array(), $depth + 1);
+ $frame = $this->_fetch($url, new SimpleGetEncoding(), $depth + 1);
$frameset->addFrame($frame, $key);
}
return $frameset;
}
/**
- * Fetches a page.
- * @param string $method GET or POST.
- * @param string/SimpleUrl $url Target to fetch as string.
- * @param SimpleFormEncoding $parameters POST parameters.
- * @param integer $depth Nested frameset depth protection.
- * @return SimplePage Parsed page.
+ * Assembles the parsing machinery and actually parses
+ * a single page. Frees all of the builder memory and so
+ * unjams the PHP memory management.
+ * @param SimpleHttpResponse $response Response from fetch.
+ * @return SimplePage Parsed top level page.
+ * @access protected
+ */
+ function &_buildPage($response) {
+ $builder = new SimplePageBuilder();
+ $page = $builder->parse($response);
+ $builder->free();
+ unset($builder);
+ return $page;
+ }
+
+ /**
+ * Fetches a page. Jointly recursive with the _parse()
+ * method as it descends a frameset.
+ * @param string/SimpleUrl $url Target to fetch.
+ * @param SimpleEncoding $encoding GET/POST parameters.
+ * @param integer $depth Nested frameset depth protection.
+ * @return SimplePage Parsed page.
* @access private
*/
- function _fetch($method, $url, $parameters, $depth = 0) {
- $response = $this->_user_agent->fetchResponse($method, $url, $parameters);
+ function &_fetch($url, $encoding, $depth = 0) {
+ $response = $this->_user_agent->fetchResponse($url, $encoding);
if ($response->isError()) {
- return new SimplePage($response);
+ $page = new SimplePage($response);
+ } else {
+ $page = $this->_parse($response, $depth);
}
- return $this->_parse($response, $depth);
+ return $page;
}
-
+
/**
* Fetches a page or a single frame if that is the current
* focus.
- * @param string $method GET or POST.
- * @param string/SimpleUrl $url Target to fetch as string.
- * @param SimpleFormEncoding $parameters POST parameters.
+ * @param SimpleUrl $url Target to fetch.
+ * @param SimpleEncoding $parameters GET/POST parameters.
* @return string Raw content of page.
* @access private
*/
- function _load($method, $url, $parameters = false) {
+ function _load($url, $parameters) {
$frame = $url->getTarget();
if (! $frame || ! $this->_page->hasFrames() || (strtolower($frame) == '_top')) {
- return $this->_loadPage($method, $url, $parameters);
+ return $this->_loadPage($url, $parameters);
}
- return $this->_loadFrame(array($frame), $method, $url, $parameters);
+ return $this->_loadFrame(array($frame), $url, $parameters);
}
-
+
/**
* Fetches a page and makes it the current page/frame.
- * @param string $method GET or POST.
* @param string/SimpleUrl $url Target to fetch as string.
- * @param SimpleFormEncoding $parameters POST parameters.
+ * @param SimplePostEncoding $parameters POST parameters.
* @return string Raw content of page.
* @access private
*/
- function _loadPage($method, $url, $parameters = false) {
- $this->_page = $this->_fetch(strtoupper($method), $url, $parameters);
+ function _loadPage($url, $parameters) {
+ $this->_page = $this->_fetch($url, $parameters);
$this->_history->recordEntry(
- $this->_page->getMethod(),
$this->_page->getUrl(),
$this->_page->getRequestData());
return $this->_page->getRaw();
}
-
+
/**
* Fetches a frame into the existing frameset replacing the
* original.
* @param array $frames List of names to drill down.
- * @param string $method GET or POST.
* @param string/SimpleUrl $url Target to fetch as string.
* @param SimpleFormEncoding $parameters POST parameters.
* @return string Raw content of page.
* @access private
*/
- function _loadFrame($frames, $method, $url, $parameters = false) {
- $page = $this->_fetch(strtoupper($method), $url, $parameters);
+ function _loadFrame($frames, $url, $parameters) {
+ $page = $this->_fetch($url, $parameters);
$this->_page->setFrame($frames, $page);
}
-
+
/**
* Removes expired and temporary cookies as if
* the browser was closed and re-opened.
@@ -330,7 +349,7 @@
function restart($date = false) {
$this->_user_agent->restart($date);
}
-
+
/**
* Adds a header to every fetch.
* @param string $header Header line to add to every
@@ -340,7 +359,7 @@
function addHeader($header) {
$this->_user_agent->addHeader($header);
}
-
+
/**
* Ages the cookies by the specified time.
* @param integer $interval Amount in seconds.
@@ -349,7 +368,7 @@
function ageCookies($interval) {
$this->_user_agent->ageCookies($interval);
}
-
+
/**
* Sets an additional cookie. If a cookie has
* the same name and path it is replaced.
@@ -363,7 +382,7 @@
function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
$this->_user_agent->setCookie($name, $value, $host, $path, $expiry);
}
-
+
/**
* Reads the most specific cookie value from the
* browser cookies.
@@ -377,7 +396,7 @@
function getCookieValue($host, $path, $name) {
return $this->_user_agent->getCookieValue($host, $path, $name);
}
-
+
/**
* Reads the current cookies for the current URL.
* @param string $name Key of cookie to find.
@@ -388,7 +407,7 @@
function getCurrentCookieValue($name) {
return $this->_user_agent->getBaseCookieValue($name, $this->_page->getUrl());
}
-
+
/**
* Sets the maximum number of redirects before
* a page will be loaded anyway.
@@ -398,7 +417,7 @@
function setMaximumRedirects($max) {
$this->_user_agent->setMaximumRedirects($max);
}
-
+
/**
* Sets the maximum number of nesting of framed pages
* within a framed page to prevent loops.
@@ -408,7 +427,7 @@
function setMaximumNestedFrames($max) {
$this->_maximum_nested_frames = $max;
}
-
+
/**
* Sets the socket timeout for opening a connection.
* @param integer $timeout Maximum time in seconds.
@@ -417,7 +436,7 @@
function setConnectionTimeout($timeout) {
$this->_user_agent->setConnectionTimeout($timeout);
}
-
+
/**
* Sets proxy to use on all requests for when
* testing from behind a firewall. Set URL
@@ -430,12 +449,12 @@
function useProxy($proxy, $username = false, $password = false) {
$this->_user_agent->useProxy($proxy, $username, $password);
}
-
+
/**
* Fetches the page content with a HEAD request.
* Will affect cookies, but will not change the base URL.
* @param string/SimpleUrl $url Target to fetch as string.
- * @param hash/SimpleFormEncoding $parameters Additional parameters for
+ * @param hash/SimpleHeadEncoding $parameters Additional parameters for
* HEAD request.
* @return boolean True if successful.
* @access public
@@ -444,19 +463,13 @@
if (! is_object($url)) {
$url = new SimpleUrl($url);
}
- if (is_array($parameters)) {
- $parameters = new SimpleFormEncoding($parameters);
- }
if ($this->getUrl()) {
$url = $url->makeAbsolute($this->getUrl());
}
- $response = $this->_user_agent->fetchResponse(
- 'HEAD',
- $url,
- $parameters);
+ $response = $this->_user_agent->fetchResponse($url, new SimpleHeadEncoding($parameters));
return ! $response->isError();
}
-
+
/**
* Fetches the page content with a simple GET request.
* @param string/SimpleUrl $url Target to fetch.
@@ -469,15 +482,12 @@
if (! is_object($url)) {
$url = new SimpleUrl($url);
}
- if (is_array($parameters)) {
- $parameters = new SimpleFormEncoding($parameters);
- }
if ($this->getUrl()) {
$url = $url->makeAbsolute($this->getUrl());
}
- return $this->_load('GET', $url, $parameters);
+ return $this->_load($url, new SimpleGetEncoding($parameters));
}
-
+
/**
* Fetches the page content with a POST request.
* @param string/SimpleUrl $url Target to fetch as string.
@@ -489,15 +499,12 @@
if (! is_object($url)) {
$url = new SimpleUrl($url);
}
- if (is_array($parameters)) {
- $parameters = new SimpleFormEncoding($parameters);
- }
if ($this->getUrl()) {
$url = $url->makeAbsolute($this->getUrl());
}
- return $this->_load('POST', $url, $parameters);
+ return $this->_load($url, new SimplePostEncoding($parameters));
}
-
+
/**
* Equivalent to hitting the retry button on the
* browser. Will attempt to repeat the page fetch. If
@@ -511,25 +518,22 @@
if (count($frames) > 0) {
$this->_loadFrame(
$frames,
- $this->_page->getMethod(),
$this->_page->getUrl(),
$this->_page->getRequestData());
return $this->_page->getRaw();
}
- if ($method = $this->_history->getMethod()) {
- $this->_page = $this->_fetch(
- $method,
- $this->_history->getUrl(),
- $this->_history->getParameters());
+ if ($url = $this->_history->getUrl()) {
+ $this->_page = $this->_fetch($url, $this->_history->getParameters());
return $this->_page->getRaw();
}
return false;
}
-
+
/**
* Equivalent to hitting the back button on the
* browser. The browser history is unchanged on
- * failure.
+ * failure. The page content is refetched as there
+ * is no concept of content caching in SimpleTest.
* @return boolean True if history entry and
* fetch succeeded
* @access public
@@ -544,11 +548,12 @@
}
return $content;
}
-
+
/**
* Equivalent to hitting the forward button on the
* browser. The browser history is unchanged on
- * failure.
+ * failure. The page content is refetched as there
+ * is no concept of content caching in SimpleTest.
* @return boolean True if history entry and
* fetch succeeded
* @access public
@@ -563,7 +568,7 @@
}
return $content;
}
-
+
/**
* Retries a request after setting the authentication
* for the current realm.
@@ -589,7 +594,7 @@
$password);
return $this->retry();
}
-
+
/**
* Accessor for a breakdown of the frameset.
* @return array Hash tree of frames by name
@@ -599,7 +604,7 @@
function getFrames() {
return $this->_page->getFrames();
}
-
+
/**
* Accessor for current frame focus. Will be
* false if no frame has focus.
@@ -611,7 +616,7 @@
function getFrameFocus() {
return $this->_page->getFrameFocus();
}
-
+
/**
* Sets the focus by index. The integer index starts from 1.
* @param integer $choice Chosen frame.
@@ -621,7 +626,7 @@
function setFrameFocusByIndex($choice) {
return $this->_page->setFrameFocusByIndex($choice);
}
-
+
/**
* Sets the focus by name.
* @param string $name Chosen frame.
@@ -631,7 +636,7 @@
function setFrameFocus($name) {
return $this->_page->setFrameFocus($name);
}
-
+
/**
* Clears the frame focus. All frames will be searched
* for content.
@@ -640,7 +645,7 @@
function clearFrameFocus() {
return $this->_page->clearFrameFocus();
}
-
+
/**
* Accessor for last error.
* @return string Error from last response.
@@ -649,7 +654,7 @@
function getTransportError() {
return $this->_page->getTransportError();
}
-
+
/**
* Accessor for current MIME type.
* @return string MIME type as string; e.g. 'text/html'
@@ -658,7 +663,7 @@
function getMimeType() {
return $this->_page->getMimeType();
}
-
+
/**
* Accessor for last response code.
* @return integer Last HTTP response code received.
@@ -667,7 +672,7 @@
function getResponseCode() {
return $this->_page->getResponseCode();
}
-
+
/**
* Accessor for last Authentication type. Only valid
* straight after a challenge (401).
@@ -677,7 +682,7 @@
function getAuthentication() {
return $this->_page->getAuthentication();
}
-
+
/**
* Accessor for last Authentication realm. Only valid
* straight after a challenge (401).
@@ -687,7 +692,7 @@
function getRealm() {
return $this->_page->getRealm();
}
-
+
/**
* Accessor for current URL of page or frame if
* focused.
@@ -698,7 +703,7 @@
$url = $this->_page->getUrl();
return $url ? $url->asString() : false;
}
-
+
/**
* Accessor for raw bytes sent down the wire.
* @return string Original text sent.
@@ -725,7 +730,7 @@
function getContent() {
return $this->_page->getRaw();
}
-
+
/**
* Accessor for plain text version of the page.
* @return string Normalised text representation.
@@ -734,7 +739,7 @@
function getContentAsText() {
return $this->_page->getText();
}
-
+
/**
* Accessor for parsed title.
* @return string Title or false if no title is present.
@@ -743,7 +748,7 @@
function getTitle() {
return $this->_page->getTitle();
}
-
+
/**
* Accessor for a list of all fixed links in current page.
* @return array List of urls with scheme of
@@ -753,7 +758,7 @@
function getAbsoluteUrls() {
return $this->_page->getAbsoluteUrls();
}
-
+
/**
* Accessor for a list of all relative links.
* @return array List of urls without hostname.
@@ -762,18 +767,30 @@
function getRelativeUrls() {
return $this->_page->getRelativeUrls();
}
-
+
/**
* Sets all form fields with that name.
+ * @param string $label Name or label of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setField($label, $value) {
+ return $this->_page->setField(new SimpleByLabelOrName($label), $value);
+ }
+
+ /**
+ * Sets all form fields with that name. Will use label if
+ * one is available (not yet implemented).
* @param string $name Name of field in forms.
* @param string $value New value of field.
* @return boolean True if field exists, otherwise false.
* @access public
*/
- function setField($name, $value) {
- return $this->_page->setField($name, $value);
+ function setFieldByName($name, $value) {
+ return $this->_page->setField(new SimpleByName($name), $value);
}
-
+
/**
* Sets all form fields with that id attribute.
* @param string/integer $id Id of field in forms.
@@ -782,9 +799,22 @@
* @access public
*/
function setFieldById($id, $value) {
- return $this->_page->setFieldById($id, $value);
+ return $this->_page->setField(new SimpleById($id), $value);
}
-
+
+ /**
+ * Accessor for a form element value within the page.
+ * Finds the first match.
+ * @param string $label Field label.
+ * @return string/boolean A value if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getField($label) {
+ return $this->_page->getField(new SimpleByLabelOrName($label));
+ }
+
/**
* Accessor for a form element value within the page.
* Finds the first match.
@@ -794,10 +824,10 @@
* and null if missing.
* @access public
*/
- function getField($name) {
- return $this->_page->getField($name);
+ function getFieldByName($name) {
+ return $this->_page->getField(new SimpleByName($name));
}
-
+
/**
* Accessor for a form element value within the page.
* @param string/integer $id Id of field in forms.
@@ -807,9 +837,9 @@
* @access public
*/
function getFieldById($id) {
- return $this->_page->getFieldById($id);
+ return $this->_page->getField(new SimpleById($id));
}
-
+
/**
* Clicks the submit button by label. The owning
* form will be submitted by this.
@@ -820,16 +850,15 @@
* @access public
*/
function clickSubmit($label = 'Submit', $additional = false) {
- if (! ($form = $this->_page->getFormBySubmitLabel($label))) {
+ if (! ($form = $this->_page->getFormBySubmit(new SimpleByLabel($label)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitButtonByLabel($label, $additional));
+ $form->submitButton(new SimpleByLabel($label), $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Clicks the submit button by name attribute. The owning
* form will be submitted by this.
@@ -839,16 +868,15 @@
* @access public
*/
function clickSubmitByName($name, $additional = false) {
- if (! ($form = $this->_page->getFormBySubmitName($name))) {
+ if (! ($form = $this->_page->getFormBySubmit(new SimpleByName($name)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitButtonByName($name, $additional));
+ $form->submitButton(new SimpleByName($name), $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Clicks the submit button by ID attribute of the button
* itself. The owning form will be submitted by this.
@@ -858,16 +886,15 @@
* @access public
*/
function clickSubmitById($id, $additional = false) {
- if (! ($form = $this->_page->getFormBySubmitId($id))) {
+ if (! ($form = $this->_page->getFormBySubmit(new SimpleById($id)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitButtonById($id, $additional));
+ $form->submitButton(new SimpleById($id), $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Clicks the submit image by some kind of label. Usually
* the alt tag or the nearest equivalent. The owning
@@ -882,16 +909,15 @@
* @access public
*/
function clickImage($label, $x = 1, $y = 1, $additional = false) {
- if (! ($form = $this->_page->getFormByImageLabel($label))) {
+ if (! ($form = $this->_page->getFormByImage(new SimpleByLabel($label)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitImageByLabel($label, $x, $y, $additional));
+ $form->submitImage(new SimpleByLabel($label), $x, $y, $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Clicks the submit image by the name. Usually
* the alt tag or the nearest equivalent. The owning
@@ -906,16 +932,15 @@
* @access public
*/
function clickImageByName($name, $x = 1, $y = 1, $additional = false) {
- if (! ($form = $this->_page->getFormByImageName($name))) {
+ if (! ($form = $this->_page->getFormByImage(new SimpleByName($name)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitImageByName($name, $x, $y, $additional));
+ $form->submitImage(new SimpleByName($name), $x, $y, $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Clicks the submit image by ID attribute. The owning
* form will be submitted by this. Clicking outside of
@@ -929,16 +954,15 @@
* @access public
*/
function clickImageById($id, $x = 1, $y = 1, $additional = false) {
- if (! ($form = $this->_page->getFormByImageId($id))) {
+ if (! ($form = $this->_page->getFormByImage(new SimpleById($id)))) {
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
- $form->submitImageById($id, $x, $y, $additional));
+ $form->submitImage(new SimpleById($id), $x, $y, $additional));
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Submits a form by the ID.
* @param string $id The form ID. No submit button value
@@ -951,12 +975,11 @@
return false;
}
$success = $this->_load(
- $form->getMethod(),
$form->getAction(),
$form->submit());
return ($success ? $this->getContent() : $success);
}
-
+
/**
* Follows a link by label. Will click the first link
* found with this link text by default, or a later
@@ -975,10 +998,10 @@
if (count($urls) < $index + 1) {
return false;
}
- $this->_load('GET', $urls[$index]);
+ $this->_load($urls[$index], new SimpleGetEncoding());
return $this->getContent();
}
-
+
/**
* Tests to see if a link is present by label.
* @param string $label Text of value attribute.
@@ -988,7 +1011,7 @@
function isLink($label) {
return (count($this->_page->getUrlsByLabel($label)) > 0);
}
-
+
/**
* Follows a link by id attribute.
* @param string $id ID attribute value.
@@ -999,10 +1022,10 @@
if (! ($url = $this->_page->getUrlById($id))) {
return false;
}
- $this->_load('GET', $url);
+ $this->_load($url, new SimpleGetEncoding());
return $this->getContent();
}
-
+
/**
* Tests to see if a link is present by ID attribute.
* @param string $id Text of id attribute.
@@ -1012,5 +1035,23 @@
function isLinkById($id) {
return (boolean)$this->_page->getUrlById($id);
}
+
+ /**
+ * Clicks a visible text item. Will first try buttons,
+ * then links and then images.
+ * @param string $label Visible text or alt text.
+ * @return string/boolean Raw page or false.
+ * @access public
+ */
+ function click($label) {
+ $raw = $this->clickSubmit($label);
+ if (! $raw) {
+ $raw = $this->clickLink($label);
+ }
+ if (! $raw) {
+ $raw = $this->clickImage($label);
+ }
+ return $raw;
+ }
}
?> \ No newline at end of file