diff options
author | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-10-02 18:40:04 +0000 |
---|---|---|
committer | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-10-02 18:40:04 +0000 |
commit | 322bb9cd2be9e51422cb2b82684692e825c2bfb7 (patch) | |
tree | 1e8e75c1ff0c47d6eda9db114a13dfa2b83adf72 /vendors/simpletest/docs/fr/browser_documentation.html | |
parent | 4ffb02ad9c1b95013a0fbf97cefde827600ecc3f (diff) | |
download | elgg-322bb9cd2be9e51422cb2b82684692e825c2bfb7.tar.gz elgg-322bb9cd2be9e51422cb2b82684692e825c2bfb7.tar.bz2 |
Added simpletest and start of unit tests.
git-svn-id: http://code.elgg.org/elgg/trunk@3503 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'vendors/simpletest/docs/fr/browser_documentation.html')
-rwxr-xr-x | vendors/simpletest/docs/fr/browser_documentation.html | 446 |
1 files changed, 446 insertions, 0 deletions
diff --git a/vendors/simpletest/docs/fr/browser_documentation.html b/vendors/simpletest/docs/fr/browser_documentation.html new file mode 100755 index 000000000..62abbbbb9 --- /dev/null +++ b/vendors/simpletest/docs/fr/browser_documentation.html @@ -0,0 +1,446 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Documentation SimpleTest : le composant de navigation web scriptable</title> +<link rel="stylesheet" type="text/css" href="docs.css" title="Styles"> +</head> +<body> +<div class="menu_back"><div class="menu"> +<a href="index.html">SimpleTest</a> + | + <a href="overview.html">Overview</a> + | + <a href="unit_test_documentation.html">Unit tester</a> + | + <a href="group_test_documentation.html">Group tests</a> + | + <a href="mock_objects_documentation.html">Mock objects</a> + | + <a href="partial_mocks_documentation.html">Partial mocks</a> + | + <a href="reporter_documentation.html">Reporting</a> + | + <a href="expectation_documentation.html">Expectations</a> + | + <a href="web_tester_documentation.html">Web tester</a> + | + <a href="form_testing_documentation.html">Testing forms</a> + | + <a href="authentication_documentation.html">Authentication</a> + | + <a href="browser_documentation.html">Scriptable browser</a> +</div></div> +<h1>Documentation sur le navigateur scriptable</h1> + This page... + <ul> +<li> + Utiliser le <a href="#scripting">navigateur web dans des scripts</a> + </li> +<li> + <a href="#deboguer">Déboguer</a> les erreurs sur les pages + </li> +<li> + <a href="#unit">Tests complexes avec des navigateurs web multiples</a> + </li> +</ul> +<div class="content"> + + <p> + Le composant de navigation web de SimpleTest peut être utilisé + non seulement à l'extérieur de la classe <span class="new_code">WebTestCase</span>, + mais aussi indépendamment du framework SimpleTest lui-même. + </p> + + <p><a class="target" name="script"><h2>Le navigateur scriptable</h2></a></p> + <p> + Vous pouvez utiliser le navigateur web dans des scripts PHP + pour confirmer que des services marchent bien comme il faut + ou pour extraire des informations à partir de ceux-ci de façon régulière. + Par exemple, voici un petit script pour extraire + le nombre de bogues ouverts dans PHP 5 à partir + du <a href="http://www.php.net/">site web PHP</a>... +<pre> +<?php + require_once('simpletest/browser.php'); + + $browser = &new SimpleBrowser(); + $browser->get('http://php.net/'); + $browser->clickLink('reporting bugs'); + $browser->clickLink('statistics'); + $browser->clickLink('PHP 5 bugs only'); + $page = $browser->getContent(); + preg_match('/status=Open.*?by=Any.*?(\d+)<\/a>/', $page, $matches); + print $matches[1]; +?> +</pre> + Bien sûr Il y a des méthodes plus simple pour réaliser + cet exemple en PHP. Par exemple, vous pourriez juste + utiliser la commande PHP <span class="new_code">file()</span> sur ce qui est + ici une page fixe. Cependant, en utilisant des scripts + avec le navigateur web vous vous autorisez l'authentification, + la gestion des cookies, le chargement automatique des fenêtres, + les redirections, la transmission de formulaires et la capacité + d'examiner les entêtes. De telles méthodes sont fragiles dans + un site en constante évolution et vous voudrez employer une méthode + plus directe pour accéder aux données de façon permanente, + mais pour des tâches simples cette technique peut s'avérer + une solution très rapide. + </p> + <p> + Toutes les méthode de navigation utilisées dans <a href="web_tester_documentation.html">WebTestCase</a> sont présente dans la classe <span class="new_code">SimpleBrowser</span>, mais les assertions sont remplacées par de simples accesseurs. Voici une liste complète des méthodes de navigation de page à page... + <table><tbody> + <tr> +<td><span class="new_code">addHeader($header)</span></td> +<td>Ajouter une entête à chaque téléchargement</td> +</tr> + <tr> +<td><span class="new_code">useProxy($proxy, $username, $password)</span></td> +<td>Utilise ce proxy à partir de maintenant</td> +</tr> + <tr> +<td><span class="new_code">head($url, $parameters)</span></td> +<td>Effectue une requête HEAD</td> +</tr> + <tr> +<td><span class="new_code">get($url, $parameters)</span></td> +<td>Télécharge une page avec un GET</td> +</tr> + <tr> +<td><span class="new_code">post($url, $parameters)</span></td> +<td>Télécharge une page avec un POST</td> +</tr> + <tr> +<td><span class="new_code">clickLink($label)</span></td> +<td>Suit un lien par son étiquette</td> +</tr> + <tr> +<td><span class="new_code">isLink($label)</span></td> +<td>Vérifie l'existance d'un lien par son étiquette</td> +</tr> + <tr> +<td><span class="new_code">clickLinkById($id)</span></td> +<td>Suit un lien par son attribut d'identification</td> +</tr> + <tr> +<td><span class="new_code">isLinkById($id)</span></td> +<td>Vérifie l'existance d'un lien par son attribut d'identification</td> +</tr> + <tr> +<td><span class="new_code">getUrl()</span></td> +<td>La page ou la fenêtre URL en cours</td> +</tr> + <tr> +<td><span class="new_code">getTitle()</span></td> +<td>Le titre de la page</td> +</tr> + <tr> +<td><span class="new_code">getContent()</span></td> +<td>Le page ou la fenêtre brute</td> +</tr> + <tr> +<td><span class="new_code">getContentAsText()</span></td> +<td>Sans code HTML à l'exception du text "alt"</td> +</tr> + <tr> +<td><span class="new_code">retry()</span></td> +<td>Répète la dernière requête</td> +</tr> + <tr> +<td><span class="new_code">back()</span></td> +<td>Utilise le bouton "précédent" du navigateur</td> +</tr> + <tr> +<td><span class="new_code">forward()</span></td> +<td>Utilise le bouton "suivant" du navigateur</td> +</tr> + <tr> +<td><span class="new_code">authenticate($username, $password)</span></td> +<td>Retente la page ou la fenêtre après une réponse 401</td> +</tr> + <tr> +<td><span class="new_code">restart($date)</span></td> +<td>Relance le navigateur pour une nouvelle session</td> +</tr> + <tr> +<td><span class="new_code">ageCookies($interval)</span></td> +<td>Change la date des cookies</td> +</tr> + <tr> +<td><span class="new_code">setCookie($name, $value)</span></td> +<td>Lance un nouveau cookie</td> +</tr> + <tr> +<td><span class="new_code">getCookieValue($host, $path, $name)</span></td> +<td>Lit le cookie le plus spécifique</td> +</tr> + <tr> +<td><span class="new_code">getCurrentCookieValue($name)</span></td> +<td>Lit le contenue du cookie en cours</td> +</tr> + </tbody></table> + Les méthode <span class="new_code">SimpleBrowser::useProxy()</span> et + <span class="new_code">SimpleBrowser::addHeader()</span> sont spéciales. + Une fois appelées, elles continuent à s'appliquer sur les téléchargements suivants. + </p> + <p> + Naviguer dans les formulaires est similaire à la <a href="form_testing_documentation.html">navigation des formulaires via WebTestCase</a>... + <table><tbody> + <tr> +<td><span class="new_code">setField($name, $value)</span></td> +<td>Modifie tous les champs avec ce nom</td> +</tr> + <tr> +<td><span class="new_code">setFieldById($id, $value)</span></td> +<td>Modifie tous les champs avec cet identifiant</td> +</tr> + <tr> +<td><span class="new_code">getField($name)</span></td> +<td>Accesseur de la valeur d'un élément de formulaire</td> +</tr> + <tr> +<td><span class="new_code">getFieldById($id)</span></td> +<td>Accesseur de la valeur de l'élément de formulaire avec cet identifiant</td> +</tr> + <tr> +<td><span class="new_code">clickSubmit($label)</span></td> +<td>Transmet le formulaire avec l'étiquette de son bouton</td> +</tr> + <tr> +<td><span class="new_code">clickSubmitByName($name)</span></td> +<td>Transmet le formulaire avec l'attribut de son bouton</td> +</tr> + <tr> +<td><span class="new_code">clickSubmitById($id)</span></td> +<td>Transmet le formulaire avec l'identifiant de son bouton</td> +</tr> + <tr> +<td><span class="new_code">clickImage($label, $x, $y)</span></td> +<td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td> +</tr> + <tr> +<td><span class="new_code">clickImageByName($name, $x, $y)</span></td> +<td>Clique sur une balise input de type image par son attribut (name="*")</td> +</tr> + <tr> +<td><span class="new_code">clickImageById($id, $x, $y)</span></td> +<td>Clique sur une balise input de type image par son identifiant (id="*")</td> +</tr> + <tr> +<td><span class="new_code">submitFormById($id)</span></td> +<td>Transmet le formulaire par son identifiant propre</td> +</tr> + </tbody></table> + Au jourd d'aujourd'hui il n'existe aucune méthode pour lister + les formulaires et les champs disponibles : ce sera probablement + ajouté dans des versions successives de SimpleTest. + </p> + <p> + A l'intérieur d'une page, les fenêtres individuelles peuvent être + sélectionnées. Si aucune sélection n'est réalisée alors + toutes les fenêtres sont fusionnées ensemble dans + une unique et grande page. + Le contenu de la page en cours sera une concaténation des + toutes les fenêtres dans l'ordre spécifié par les balises "frameset". + <table><tbody> + <tr> +<td><span class="new_code">getFrames()</span></td> +<td>Un déchargement de la structure de la fenêtre courante</td> +</tr> + <tr> +<td><span class="new_code">getFrameFocus()</span></td> +<td>L'index ou l'étiquette de la fenêtre en courante</td> +</tr> + <tr> +<td><span class="new_code">setFrameFocusByIndex($choice)</span></td> +<td>Sélectionne la fenêtre numérotée à partir de 1</td> +</tr> + <tr> +<td><span class="new_code">setFrameFocus($name)</span></td> +<td>Sélectionne une fenêtre par son étiquette</td> +</tr> + <tr> +<td><span class="new_code">clearFrameFocus()</span></td> +<td>Traite toutes les fenêtres comme une seule page</td> +</tr> + </tbody></table> + Lorsqu'on est focalisé sur une fenêtre unique, + le contenu viendra de celle-ci uniquement. + Cela comprend les liens à cliquer et les formulaires à transmettre. + </p> + + <p><a class="target" name="deboguer"><h2>Où sont les erreurs ?</h2></a></p> + <p> + Toute cette masse de fonctionnalités est géniale + lorsqu'on arrive à bien télécharger les pages, + mais ce n'est pas toujours évident. + Pour aider à découvrir les erreurs, le navigateur a aussi + des méthodes pour aider au débogage. + <table><tbody> + <tr> +<td><span class="new_code">setConnectionTimeout($timeout)</span></td> +<td>Ferme la socket avec un délai trop long</td> +</tr> + <tr> +<td><span class="new_code">getRequest()</span></td> +<td>L'entête de la requête brute de la page ou de la fenêtre</td> +</tr> + <tr> +<td><span class="new_code">getHeaders()</span></td> +<td>L'entête de réponse de la page ou de la fenêtre</td> +</tr> + <tr> +<td><span class="new_code">getTransportError()</span></td> +<td>N'importe quel erreur au niveau de la socket dans le dernier téléchargement</td> +</tr> + <tr> +<td><span class="new_code">getResponseCode()</span></td> +<td>La réponse HTTP de la page ou de la fenêtre</td> +</tr> + <tr> +<td><span class="new_code">getMimeType()</span></td> +<td>Le type Mime de la page our de la fenêtre</td> +</tr> + <tr> +<td><span class="new_code">getAuthentication()</span></td> +<td>Le type d'authentification dans l'entête d'une provocation 401</td> +</tr> + <tr> +<td><span class="new_code">getRealm()</span></td> +<td>Le realm d'authentification dans l'entête d'une provocation 401</td> +</tr> + <tr> +<td><span class="new_code">setMaximumRedirects($max)</span></td> +<td>Nombre de redirections avant que la page ne soit chargée automatiquement</td> +</tr> + <tr> +<td><span class="new_code">setMaximumNestedFrames($max)</span></td> +<td>Protection contre des framesets récursifs</td> +</tr> + <tr> +<td><span class="new_code">ignoreFrames()</span></td> +<td>Neutralise le support des fenêtres</td> +</tr> + <tr> +<td><span class="new_code">useFrames()</span></td> +<td>Autorise le support des fenêtres</td> +</tr> + </tbody></table> + Les méthodes <span class="new_code">SimpleBrowser::setConnectionTimeout()</span>, + <span class="new_code">SimpleBrowser::setMaximumRedirects()</span>, + <span class="new_code">SimpleBrowser::setMaximumNestedFrames()</span>, + <span class="new_code">SimpleBrowser::ignoreFrames()</span> + et <span class="new_code">SimpleBrowser::useFrames()</span> continuent à s'appliquer + sur toutes les requêtes suivantes. + Les autres méthodes tiennent compte des fenêtres. + Cela veut dire que si une fenêtre individuelle ne se charge pas, + il suffit de se diriger vers elle avec + <span class="new_code">SimpleBrowser::setFrameFocus()</span> : ensuite on utilisera + <span class="new_code">SimpleBrowser::getRequest()</span>, etc. pour voir ce qui se passe. + </p> + + <p><a class="target" name="unit"><h2>Tests unitaires complexes avec des navigateurs multiples</h2></a></p> + <p> + Tout ce qui peut être fait dans + <a href="web_tester_documentation.html">WebTestCase</a> peut maintenant + être fait dans un <a href="unit_tester_documentation.html">UnitTestCase</a>. + Ce qui revient à dire que nous pouvons librement mélanger + des tests sur des objets de domaine avec l'interface web... +<pre><strong> +class TestOfRegistration extends UnitTestCase { + function testNewUserAddedToAuthenticator() {</strong> + $browser = &new SimpleBrowser(); + $browser->get('http://my-site.com/register.php'); + $browser->setField('email', 'me@here'); + $browser->setField('password', 'Secret'); + $browser->clickSubmit('Register'); + <strong> + $authenticator = &new Authenticator(); + $member = &$authenticator->findByEmail('me@here'); + $this->assertEqual($member->getPassword(), 'Secret');</strong> + } +} +</pre> + Bien que ça puisse être utile par convenance temporaire, + je ne suis pas fan de ce genre de test. Ce test s'applique + à plusieurs couches de l'application, ça implique qu'il est + plus que probable qu'il faudra le remanier lorsque le code changera. + </p> + <p> + Un cas plus utile d'utilisation directe du navigateur est + le moment où le <span class="new_code">WebTestCase</span> ne peut plus suivre. + Un exemple ? Quand deux navigateurs doivent être utilisés en même temps. + </p> + <p> + Par exemple, supposons que nous voulions interdire + des usages simultanés d'un site avec le même login d'identification. + Ce scénario de test le vérifie... +<pre> +class TestOfSecurity extends UnitTestCase { + function testNoMultipleLoginsFromSameUser() { + $first = &new SimpleBrowser(); + $first->get('http://my-site.com/login.php'); + $first->setField('name', 'Me'); + $first->setField('password', 'Secret'); + $first->clickSubmit('Enter'); + $this->assertEqual($first->getTitle(), 'Welcome'); + + $second = &new SimpleBrowser(); + $second->get('http://my-site.com/login.php'); + $second->setField('name', 'Me'); + $second->setField('password', 'Secret'); + $second->clickSubmit('Enter'); + $this->assertEqual($second->getTitle(), 'Access Denied'); + } +} +</pre> + Vous pouvez aussi utiliser la classe <span class="new_code">SimpleBrowser</span> + quand vous souhaitez écrire des scénarios de test en utilisant + un autre outil que SimpleTest. + </p> + + </div> + References and related information... + <ul> +<li> + La page du projet SimpleTest sur + <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>. + </li> +<li> + La page de téléchargement de SimpleTest sur + <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>. + </li> +<li> + <a href="http://simpletest.org/api/">L'API de développeur pour SimpleTest</a> + donne tous les détails sur les classes et les assertions disponibles. + </li> +</ul> +<div class="menu_back"><div class="menu"> +<a href="index.html">SimpleTest</a> + | + <a href="overview.html">Overview</a> + | + <a href="unit_test_documentation.html">Unit tester</a> + | + <a href="group_test_documentation.html">Group tests</a> + | + <a href="mock_objects_documentation.html">Mock objects</a> + | + <a href="partial_mocks_documentation.html">Partial mocks</a> + | + <a href="reporter_documentation.html">Reporting</a> + | + <a href="expectation_documentation.html">Expectations</a> + | + <a href="web_tester_documentation.html">Web tester</a> + | + <a href="form_testing_documentation.html">Testing forms</a> + | + <a href="authentication_documentation.html">Authentication</a> + | + <a href="browser_documentation.html">Scriptable browser</a> +</div></div> +<div class="copyright"> + Copyright<br>Marcus Baker 2006 + </div> +</body> +</html> |