source: trunk/server/www/vendors/simpletest/docs/fr/browser_documentation.html @ 6

Last change on this file since 6 was 6, checked in by sander, 12 years ago

Added SimpleTest? test framework

File size: 18.9 KB
Line 
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Documentation SimpleTest : le composant de navigation web scriptable</title>
5<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
6</head>
7<body>
8<div class="menu_back"><div class="menu">
9<a href="index.html">SimpleTest</a>
10                |
11                <a href="overview.html">Overview</a>
12                |
13                <a href="unit_test_documentation.html">Unit tester</a>
14                |
15                <a href="group_test_documentation.html">Group tests</a>
16                |
17                <a href="mock_objects_documentation.html">Mock objects</a>
18                |
19                <a href="partial_mocks_documentation.html">Partial mocks</a>
20                |
21                <a href="reporter_documentation.html">Reporting</a>
22                |
23                <a href="expectation_documentation.html">Expectations</a>
24                |
25                <a href="web_tester_documentation.html">Web tester</a>
26                |
27                <a href="form_testing_documentation.html">Testing forms</a>
28                |
29                <a href="authentication_documentation.html">Authentication</a>
30                |
31                <a href="browser_documentation.html">Scriptable browser</a>
32</div></div>
33<h1>Documentation sur le navigateur scriptable</h1>
34        This page...
35        <ul>
36<li>
37            Utiliser le <a href="#scripting">navigateur web dans des scripts</a>
38        </li>
39<li>
40            <a href="#deboguer">Déboguer</a> les erreurs sur les pages
41        </li>
42<li>
43            <a href="#unit">Tests complexes avec des navigateurs web multiples</a>
44        </li>
45</ul>
46<div class="content">
47       
48            <p>
49                Le composant de navigation web de SimpleTest peut être utilisé
50                non seulement à l'extérieur de la classe <span class="new_code">WebTestCase</span>,
51                mais aussi indépendamment du framework SimpleTest lui-même.
52            </p>
53       
54        <p><a class="target" name="script"><h2>Le navigateur scriptable</h2></a></p>
55            <p>
56                Vous pouvez utiliser le navigateur web dans des scripts PHP
57                pour confirmer que des services marchent bien comme il faut
58                ou pour extraire des informations à partir de ceux-ci de façon réguliÚre.
59                Par exemple, voici un petit script pour extraire
60                le nombre de bogues ouverts dans PHP 5 à partir
61                du <a href="http://www.php.net/">site web PHP</a>...
62<pre>
63&lt;?php
64    require_once('simpletest/browser.php');
65   
66    $browser = &amp;new SimpleBrowser();
67    $browser-&gt;get('http://php.net/');
68    $browser-&gt;clickLink('reporting bugs');
69    $browser-&gt;clickLink('statistics');
70    $browser-&gt;clickLink('PHP 5 bugs only');
71    $page = $browser-&gt;getContent();
72    preg_match('/status=Open.*?by=Any.*?(\d+)&lt;\/a&gt;/', $page, $matches);
73    print $matches[1];
74?&gt;
75</pre>
76                Bien sûr Il y a des méthodes plus simple pour réaliser
77                cet exemple en PHP. Par exemple, vous pourriez juste
78                utiliser la commande PHP <span class="new_code">file()</span> sur ce qui est
79                ici une page fixe. Cependant, en utilisant des scripts
80                avec le navigateur web vous vous autorisez l'authentification,
81                la gestion des cookies, le chargement automatique des fenêtres,
82                les redirections, la transmission de formulaires et la capacité
83                d'examiner les entêtes. De telles méthodes sont fragiles dans
84                un site en constante évolution et vous voudrez employer une méthode
85                plus directe pour accéder aux données de façon permanente,
86                mais pour des tâches simples cette technique peut s'avérer
87                une solution trÚs rapide.
88            </p>
89            <p>
90                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...
91                <table><tbody>
92                    <tr>
93<td><span class="new_code">addHeader($header)</span></td>
94<td>Ajouter une entête à chaque téléchargement</td>
95</tr>
96                    <tr>
97<td><span class="new_code">useProxy($proxy, $username, $password)</span></td>
98<td>Utilise ce proxy à partir de maintenant</td>
99</tr> 
100                    <tr>
101<td><span class="new_code">head($url, $parameters)</span></td>
102<td>Effectue une requête HEAD</td>
103</tr>
104                    <tr>
105<td><span class="new_code">get($url, $parameters)</span></td>
106<td>Télécharge une page avec un GET</td>
107</tr>
108                    <tr>
109<td><span class="new_code">post($url, $parameters)</span></td>
110<td>Télécharge une page avec un POST</td>
111</tr>
112                    <tr>
113<td><span class="new_code">clickLink($label)</span></td>
114<td>Suit un lien par son étiquette</td>
115</tr>
116                    <tr>
117<td><span class="new_code">isLink($label)</span></td>
118<td>Vérifie l'existance d'un lien par son étiquette</td>
119</tr>
120                    <tr>
121<td><span class="new_code">clickLinkById($id)</span></td>
122<td>Suit un lien par son attribut d'identification</td>
123</tr>
124                    <tr>
125<td><span class="new_code">isLinkById($id)</span></td>
126<td>Vérifie l'existance d'un lien par son attribut d'identification</td>
127</tr>
128                    <tr>
129<td><span class="new_code">getUrl()</span></td>
130<td>La page ou la fenêtre URL en cours</td>
131</tr>
132                    <tr>
133<td><span class="new_code">getTitle()</span></td>
134<td>Le titre de la page</td>
135</tr>
136                    <tr>
137<td><span class="new_code">getContent()</span></td>
138<td>Le page ou la fenêtre brute</td>
139</tr>
140                    <tr>
141<td><span class="new_code">getContentAsText()</span></td>
142<td>Sans code HTML à l'exception du text "alt"</td>
143</tr>
144                    <tr>
145<td><span class="new_code">retry()</span></td>
146<td>RépÚte la derniÚre requête</td>
147</tr>
148                    <tr>
149<td><span class="new_code">back()</span></td>
150<td>Utilise le bouton "précédent" du navigateur</td>
151</tr>
152                    <tr>
153<td><span class="new_code">forward()</span></td>
154<td>Utilise le bouton "suivant" du navigateur</td>
155</tr>
156                    <tr>
157<td><span class="new_code">authenticate($username, $password)</span></td>
158<td>Retente la page ou la fenêtre aprÚs une réponse 401</td>
159</tr>
160                    <tr>
161<td><span class="new_code">restart($date)</span></td>
162<td>Relance le navigateur pour une nouvelle session</td>
163</tr>
164                    <tr>
165<td><span class="new_code">ageCookies($interval)</span></td>
166<td>Change la date des cookies</td>
167</tr>
168                    <tr>
169<td><span class="new_code">setCookie($name, $value)</span></td>
170<td>Lance un nouveau cookie</td>
171</tr>
172                    <tr>
173<td><span class="new_code">getCookieValue($host, $path, $name)</span></td>
174<td>Lit le cookie le plus spécifique</td>
175</tr>
176                    <tr>
177<td><span class="new_code">getCurrentCookieValue($name)</span></td>
178<td>Lit le contenue du cookie en cours</td>
179</tr>
180                </tbody></table>
181                Les méthode <span class="new_code">SimpleBrowser::useProxy()</span> et
182                <span class="new_code">SimpleBrowser::addHeader()</span> sont spéciales.
183                Une fois appelées, elles continuent à s'appliquer sur les téléchargements suivants.
184            </p>
185            <p>
186                Naviguer dans les formulaires est similaire à la <a href="form_testing_documentation.html">navigation des formulaires via WebTestCase</a>...
187                <table><tbody>
188                    <tr>
189<td><span class="new_code">setField($name, $value)</span></td>
190<td>Modifie tous les champs avec ce nom</td>
191</tr>
192                    <tr>
193<td><span class="new_code">setFieldById($id, $value)</span></td>
194<td>Modifie tous les champs avec cet identifiant</td>
195</tr>
196                    <tr>
197<td><span class="new_code">getField($name)</span></td>
198<td>Accesseur de la valeur d'un élément de formulaire</td>
199</tr>
200                    <tr>
201<td><span class="new_code">getFieldById($id)</span></td>
202<td>Accesseur de la valeur de l'élément de formulaire avec cet identifiant</td>
203</tr>
204                    <tr>
205<td><span class="new_code">clickSubmit($label)</span></td>
206<td>Transmet le formulaire avec l'étiquette de son bouton</td>
207</tr>
208                    <tr>
209<td><span class="new_code">clickSubmitByName($name)</span></td>
210<td>Transmet le formulaire avec l'attribut de son bouton</td>
211</tr>
212                    <tr>
213<td><span class="new_code">clickSubmitById($id)</span></td>
214<td>Transmet le formulaire avec l'identifiant de son bouton</td>
215</tr>
216                    <tr>
217<td><span class="new_code">clickImage($label, $x, $y)</span></td>
218<td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td>
219</tr>
220                    <tr>
221<td><span class="new_code">clickImageByName($name, $x, $y)</span></td>
222<td>Clique sur une balise input de type image par son attribut (name="*")</td>
223</tr>
224                    <tr>
225<td><span class="new_code">clickImageById($id, $x, $y)</span></td>
226<td>Clique sur une balise input de type image par son identifiant (id="*")</td>
227</tr>
228                    <tr>
229<td><span class="new_code">submitFormById($id)</span></td>
230<td>Transmet le formulaire par son identifiant propre</td>
231</tr>
232                </tbody></table>
233                Au jourd d'aujourd'hui il n'existe aucune méthode pour lister
234                les formulaires et les champs disponibles : ce sera probablement
235                ajouté dans des versions successives de SimpleTest.
236            </p>
237            <p>
238                A l'intérieur d'une page, les fenêtres individuelles peuvent être
239                sélectionnées. Si aucune sélection n'est réalisée alors
240                toutes les fenêtres sont fusionnées ensemble dans
241                une unique et grande page.
242                Le contenu de la page en cours sera une concaténation des
243                toutes les fenêtres dans l'ordre spécifié par les balises "frameset".
244                <table><tbody>
245                    <tr>
246<td><span class="new_code">getFrames()</span></td>
247<td>Un déchargement de la structure de la fenêtre courante</td>
248</tr>
249                    <tr>
250<td><span class="new_code">getFrameFocus()</span></td>
251<td>L'index ou l'étiquette de la fenêtre en courante</td>
252</tr>
253                    <tr>
254<td><span class="new_code">setFrameFocusByIndex($choice)</span></td>
255<td>Sélectionne la fenêtre numérotée à partir de 1</td>
256</tr>
257                    <tr>
258<td><span class="new_code">setFrameFocus($name)</span></td>
259<td>Sélectionne une fenêtre par son étiquette</td>
260</tr>
261                    <tr>
262<td><span class="new_code">clearFrameFocus()</span></td>
263<td>Traite toutes les fenêtres comme une seule page</td>
264</tr>
265                </tbody></table>
266                Lorsqu'on est focalisé sur une fenêtre unique,
267                le contenu viendra de celle-ci uniquement.
268                Cela comprend les liens à cliquer et les formulaires à transmettre.
269            </p>
270       
271        <p><a class="target" name="deboguer"><h2>Où sont les erreurs ?</h2></a></p>
272            <p>
273                Toute cette masse de fonctionnalités est géniale
274                lorsqu'on arrive à bien télécharger les pages,
275                mais ce n'est pas toujours évident.
276                Pour aider à découvrir les erreurs, le navigateur a aussi
277                des méthodes pour aider au débogage.
278                <table><tbody>
279                    <tr>
280<td><span class="new_code">setConnectionTimeout($timeout)</span></td>
281<td>Ferme la socket avec un délai trop long</td>
282</tr>
283                    <tr>
284<td><span class="new_code">getRequest()</span></td>
285<td>L'entête de la requête brute de la page ou de la fenêtre</td>
286</tr>
287                    <tr>
288<td><span class="new_code">getHeaders()</span></td>
289<td>L'entête de réponse de la page ou de la fenêtre</td>
290</tr>
291                    <tr>
292<td><span class="new_code">getTransportError()</span></td>
293<td>N'importe quel erreur au niveau de la socket dans le dernier téléchargement</td>
294</tr>
295                    <tr>
296<td><span class="new_code">getResponseCode()</span></td>
297<td>La réponse HTTP de la page ou de la fenêtre</td>
298</tr>
299                    <tr>
300<td><span class="new_code">getMimeType()</span></td>
301<td>Le type Mime de la page our de la fenêtre</td>
302</tr>
303                    <tr>
304<td><span class="new_code">getAuthentication()</span></td>
305<td>Le type d'authentification dans l'entête d'une provocation 401</td>
306</tr>
307                    <tr>
308<td><span class="new_code">getRealm()</span></td>
309<td>Le realm d'authentification dans l'entête d'une provocation 401</td>
310</tr>
311                    <tr>
312<td><span class="new_code">setMaximumRedirects($max)</span></td>
313<td>Nombre de redirections avant que la page ne soit chargée automatiquement</td>
314</tr>
315                    <tr>
316<td><span class="new_code">setMaximumNestedFrames($max)</span></td>
317<td>Protection contre des framesets récursifs</td>
318</tr>
319                    <tr>
320<td><span class="new_code">ignoreFrames()</span></td>
321<td>Neutralise le support des fenêtres</td>
322</tr>
323                    <tr>
324<td><span class="new_code">useFrames()</span></td>
325<td>Autorise le support des fenêtres</td>
326</tr>
327                </tbody></table>
328                Les méthodes <span class="new_code">SimpleBrowser::setConnectionTimeout()</span>,
329                <span class="new_code">SimpleBrowser::setMaximumRedirects()</span>,
330                <span class="new_code">SimpleBrowser::setMaximumNestedFrames()</span>,
331                <span class="new_code">SimpleBrowser::ignoreFrames()</span>
332                et <span class="new_code">SimpleBrowser::useFrames()</span> continuent à s'appliquer
333                sur toutes les requêtes suivantes.
334                Les autres méthodes tiennent compte des fenêtres.
335                Cela veut dire que si une fenêtre individuelle ne se charge pas,
336                il suffit de se diriger vers elle avec
337                <span class="new_code">SimpleBrowser::setFrameFocus()</span> : ensuite on utilisera
338                <span class="new_code">SimpleBrowser::getRequest()</span>, etc. pour voir ce qui se passe.
339            </p>
340       
341        <p><a class="target" name="unit"><h2>Tests unitaires complexes avec des navigateurs multiples</h2></a></p>
342            <p>
343                Tout ce qui peut être fait dans
344                <a href="web_tester_documentation.html">WebTestCase</a> peut maintenant
345                être fait dans un <a href="unit_tester_documentation.html">UnitTestCase</a>.
346                Ce qui revient à dire que nous pouvons librement mélanger
347                des tests sur des objets de domaine avec l'interface web...
348<pre><strong>
349class TestOfRegistration extends UnitTestCase {
350    function testNewUserAddedToAuthenticator() {</strong>
351        $browser = &amp;new SimpleBrowser();
352        $browser-&gt;get('http://my-site.com/register.php');
353        $browser-&gt;setField('email', 'me@here');
354        $browser-&gt;setField('password', 'Secret');
355        $browser-&gt;clickSubmit('Register');
356        <strong>
357        $authenticator = &amp;new Authenticator();
358        $member = &amp;$authenticator-&gt;findByEmail('me@here');
359        $this-&gt;assertEqual($member-&gt;getPassword(), 'Secret');</strong>
360    }
361}
362</pre>
363                Bien que ça puisse être utile par convenance temporaire,
364                je ne suis pas fan de ce genre de test. Ce test s'applique
365                à plusieurs couches de l'application, ça implique qu'il est
366                plus que probable qu'il faudra le remanier lorsque le code changera.
367            </p>
368            <p>
369                Un cas plus utile d'utilisation directe du navigateur est
370                le moment où le <span class="new_code">WebTestCase</span> ne peut plus suivre.
371                Un exemple ? Quand deux navigateurs doivent être utilisés en même temps.
372            </p>
373            <p>
374                Par exemple, supposons que nous voulions interdire
375                des usages simultanés d'un site avec le même login d'identification.
376                Ce scénario de test le vérifie...
377<pre>
378class TestOfSecurity extends UnitTestCase {
379    function testNoMultipleLoginsFromSameUser() {
380        $first = &amp;new SimpleBrowser();
381        $first-&gt;get('http://my-site.com/login.php');
382        $first-&gt;setField('name', 'Me');
383        $first-&gt;setField('password', 'Secret');
384        $first-&gt;clickSubmit('Enter');
385        $this-&gt;assertEqual($first-&gt;getTitle(), 'Welcome');
386       
387        $second = &amp;new SimpleBrowser();
388        $second-&gt;get('http://my-site.com/login.php');
389        $second-&gt;setField('name', 'Me');
390        $second-&gt;setField('password', 'Secret');
391        $second-&gt;clickSubmit('Enter');
392        $this-&gt;assertEqual($second-&gt;getTitle(), 'Access Denied');
393    }
394}
395</pre>
396                Vous pouvez aussi utiliser la classe <span class="new_code">SimpleBrowser</span>
397                quand vous souhaitez écrire des scénarios de test en utilisant
398                un autre outil que SimpleTest.
399            </p>
400       
401    </div>
402        References and related information...
403        <ul>
404<li>
405            La page du projet SimpleTest sur
406            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
407        </li>
408<li>
409            La page de téléchargement de SimpleTest sur
410            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
411        </li>
412<li>
413            <a href="http://simpletest.org/api/">L'API de développeur pour SimpleTest</a>
414            donne tous les détails sur les classes et les assertions disponibles.
415        </li>
416</ul>
417<div class="menu_back"><div class="menu">
418<a href="index.html">SimpleTest</a>
419                |
420                <a href="overview.html">Overview</a>
421                |
422                <a href="unit_test_documentation.html">Unit tester</a>
423                |
424                <a href="group_test_documentation.html">Group tests</a>
425                |
426                <a href="mock_objects_documentation.html">Mock objects</a>
427                |
428                <a href="partial_mocks_documentation.html">Partial mocks</a>
429                |
430                <a href="reporter_documentation.html">Reporting</a>
431                |
432                <a href="expectation_documentation.html">Expectations</a>
433                |
434                <a href="web_tester_documentation.html">Web tester</a>
435                |
436                <a href="form_testing_documentation.html">Testing forms</a>
437                |
438                <a href="authentication_documentation.html">Authentication</a>
439                |
440                <a href="browser_documentation.html">Scriptable browser</a>
441</div></div>
442<div class="copyright">
443            Copyright<br>Marcus Baker 2006
444        </div>
445</body>
446</html>
Note: See TracBrowser for help on using the repository browser.