@uuv/runner-commons 2.24.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ # [2.25.0](https://github.com/Orange-OpenSource/uuv/compare/runner-commons-v2.24.1...runner-commons-v2.25.0) (2024-09-01)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * set focus after within action ([e671f2c](https://github.com/Orange-OpenSource/uuv/commit/e671f2c378e21c90b7f1a57cc4f9ab7481c59283))
7
+
8
+
9
+ ### Features
10
+
11
+ * add enter sentence, [#732](https://github.com/Orange-OpenSource/uuv/issues/732) ([ac4ea9e](https://github.com/Orange-OpenSource/uuv/commit/ac4ea9e1fdf27a0c17827f54e12b3f487db66e4d))
12
+ * **assistant:** add form completion, [#719](https://github.com/Orange-OpenSource/uuv/issues/719) ([ea74b23](https://github.com/Orange-OpenSource/uuv/commit/ea74b239c37c1b30b155400d6f2f30a939975d3e))
13
+ * change type and click sentence to basedRole sentence, [#731](https://github.com/Orange-OpenSource/uuv/issues/731) ([3131e3d](https://github.com/Orange-OpenSource/uuv/commit/3131e3d5eecbf6b04a06ba70b20ebe041690747c))
14
+
15
+ ## [2.24.1](https://github.com/Orange-OpenSource/uuv/compare/runner-commons-v2.24.0...runner-commons-v2.24.1) (2024-08-25)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **runner-cypress:** update dependency cypress to v13.13.3 ([c536497](https://github.com/Orange-OpenSource/uuv/commit/c536497539eeead0b8b14bf5901ac0622e6339c1))
21
+ * **runner-playwright:** update dependency axe-playwright to v2.0.2 ([f745bff](https://github.com/Orange-OpenSource/uuv/commit/f745bffabe494a88962d7d38e7b7450c9f324d52))
22
+
1
23
  # [2.24.0](https://github.com/Orange-OpenSource/uuv/compare/runner-commons-v2.23.0...runner-commons-v2.24.0) (2024-08-18)
2
24
 
3
25
 
@@ -71,6 +71,18 @@
71
71
  "description": "Checks that an Html element exists with the specified [accessible role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) and [name](https://russmaxdesign.github.io/html-elements-names/) and is unchecked",
72
72
  "wording": "I should see $indefiniteArticle $roleName named {string} unchecked",
73
73
  "section": "checkable"
74
+ },
75
+ {
76
+ "key": "key.when.enter",
77
+ "description": "Writes the sentence given as a parameter inside the specified field (useful for example to fill in a form field)",
78
+ "wording": "I enter the value {string} in $definiteArticle $roleName named {string}",
79
+ "section": "type"
80
+ },
81
+ {
82
+ "key": "key.when.click",
83
+ "description": "Triggers a click on the element with role $roleId and the specified name",
84
+ "wording": "I click on $roleName named {string}",
85
+ "section": "click"
74
86
  }
75
87
  ]
76
88
  }
@@ -16,23 +16,25 @@ class EnAccessibleRole extends accessible_role_1.AccessibleRole {
16
16
  name;
17
17
  definiteArticle;
18
18
  indefiniteArticle;
19
+ shouldGenerateClickSentence;
19
20
  shouldGenerateTypeSentence;
20
21
  shouldGenerateContainsSentence;
21
22
  shouldGenerateKeyboardSentence;
22
23
  shouldGenerateCheckedSentence;
23
- constructor(id, name, definiteArticle = DEFINITE_ARTICLE.THE, indefiniteArticle = INDEFINITE_ARTICLE.A, shouldGenerateTypeSentence = true, shouldGenerateContainsSentence = true, shouldGenerateKeyboardSentence = false, shouldGenerateCheckedSentence = false) {
24
+ constructor(id, name, definiteArticle = DEFINITE_ARTICLE.THE, indefiniteArticle = INDEFINITE_ARTICLE.A, shouldGenerateClickSentence = false, shouldGenerateTypeSentence = true, shouldGenerateContainsSentence = true, shouldGenerateKeyboardSentence = false, shouldGenerateCheckedSentence = false) {
24
25
  super();
25
26
  this.id = id;
26
27
  this.name = name;
27
28
  this.definiteArticle = definiteArticle;
28
29
  this.indefiniteArticle = indefiniteArticle;
30
+ this.shouldGenerateClickSentence = shouldGenerateClickSentence;
29
31
  this.shouldGenerateTypeSentence = shouldGenerateTypeSentence;
30
32
  this.shouldGenerateContainsSentence = shouldGenerateContainsSentence;
31
33
  this.shouldGenerateKeyboardSentence = shouldGenerateKeyboardSentence;
32
34
  this.shouldGenerateCheckedSentence = shouldGenerateCheckedSentence;
33
35
  }
34
36
  static from(input) {
35
- return new EnAccessibleRole(input.id, input.name, input.definiteArticle, input.indefiniteArticle, input.shouldGenerateTypeSentence, input.shouldGenerateContainsSentence, input.shouldGenerateKeyboardSentence, input.shouldGenerateCheckedSentence);
37
+ return new EnAccessibleRole(input.id, input.name, input.definiteArticle, input.indefiniteArticle, input.shouldGenerateClickSentence, input.shouldGenerateTypeSentence, input.shouldGenerateContainsSentence, input.shouldGenerateKeyboardSentence, input.shouldGenerateCheckedSentence);
36
38
  }
37
39
  getDefiniteArticle() {
38
40
  return this.definiteArticle.toString();
@@ -53,9 +55,9 @@ exports.EN_ROLES = [
53
55
  { id: "application", name: "application", indefiniteArticle: INDEFINITE_ARTICLE.AN },
54
56
  { id: "article", name: "article", indefiniteArticle: INDEFINITE_ARTICLE.AN },
55
57
  { id: "banner", name: "banner" },
56
- { id: "button", name: "button", shouldGenerateKeyboardSentence: true },
58
+ { id: "button", name: "button", shouldGenerateKeyboardSentence: true, shouldGenerateClickSentence: true },
57
59
  { id: "cell", name: "cell" },
58
- { id: "checkbox", name: "checkbox", shouldGenerateKeyboardSentence: true, shouldGenerateCheckedSentence: true },
60
+ { id: "checkbox", name: "checkbox", shouldGenerateKeyboardSentence: true, shouldGenerateCheckedSentence: true, shouldGenerateClickSentence: true },
59
61
  { id: "columnheader", name: "column header" },
60
62
  { id: "combobox", name: "combo box", shouldGenerateKeyboardSentence: true },
61
63
  { id: "command", name: "command" },
@@ -77,7 +79,7 @@ exports.EN_ROLES = [
77
79
  { id: "heading", name: "title" },
78
80
  { id: "img", name: "picture" },
79
81
  { id: "landmark", name: "landmark" },
80
- { id: "link", name: "link", shouldGenerateKeyboardSentence: true },
82
+ { id: "link", name: "link", shouldGenerateKeyboardSentence: true, shouldGenerateClickSentence: true },
81
83
  { id: "list", name: "list", shouldGenerateContainsSentence: false, shouldGenerateTypeSentence: false },
82
84
  { id: "listbox", name: "list box", shouldGenerateKeyboardSentence: true },
83
85
  { id: "listitem", name: "list item" },
@@ -87,7 +89,7 @@ exports.EN_ROLES = [
87
89
  { id: "math", name: "math" },
88
90
  { id: "menu", name: "menu" },
89
91
  { id: "menubar", name: "menubar" },
90
- { id: "menuitem", name: "menuitem", shouldGenerateKeyboardSentence: true },
92
+ { id: "menuitem", name: "menuitem", shouldGenerateKeyboardSentence: true, shouldGenerateClickSentence: true },
91
93
  { id: "menuitemcheckbox", name: "menuitemcheckbox", shouldGenerateKeyboardSentence: true },
92
94
  { id: "menuitemradio", name: "menuitemradio", shouldGenerateKeyboardSentence: true, shouldGenerateCheckedSentence: true },
93
95
  { id: "meter", name: "counter" },
@@ -97,7 +99,7 @@ exports.EN_ROLES = [
97
99
  { id: "option", name: "option", indefiniteArticle: INDEFINITE_ARTICLE.AN },
98
100
  { id: "presentation", name: "presentation" },
99
101
  { id: "progressbar", name: "progress bar" },
100
- { id: "radio", name: "radio", shouldGenerateKeyboardSentence: true, shouldGenerateCheckedSentence: true },
102
+ { id: "radio", name: "radio", shouldGenerateKeyboardSentence: true, shouldGenerateCheckedSentence: true, shouldGenerateClickSentence: true },
101
103
  { id: "radiogroup", name: "radio group" },
102
104
  { id: "range", name: "range" },
103
105
  { id: "region", name: "region" },
@@ -4,16 +4,6 @@
4
4
  "description": "Triggers a click on the selected element.<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
5
5
  "wording": "I click"
6
6
  },
7
- {
8
- "key": "key.when.click.button",
9
- "description": "Triggers a click on the given button with specific name",
10
- "wording": "I click on button named {string}"
11
- },
12
- {
13
- "key": "key.when.click.link",
14
- "description": "Triggers a click on the given link with specific name",
15
- "wording": "I click on link named {string}"
16
- },
17
7
  {
18
8
  "key": "key.when.click.withRole",
19
9
  "description": "Triggers a click on the element with given role and specific name",
@@ -40,10 +30,15 @@
40
30
  "wording": "I set timeout with value {int}"
41
31
  },
42
32
  {
43
- "key": "key.when.type",
33
+ "key": "key.when.type.withContext",
44
34
  "description": "Writes the sentence passed as a parameter (useful for example to fill in a form field).<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
45
35
  "wording": "I type the sentence {string}"
46
36
  },
37
+ {
38
+ "key": "key.when.enter.withContext",
39
+ "description": "Writes the sentence passed as a parameter (useful for example to fill in a form field).<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
40
+ "wording": "I enter the value {string}"
41
+ },
47
42
  {
48
43
  "key": "key.when.keyboard.press",
49
44
  "description": "Press specified key: <table><thead><tr><th>Key</th><th>Description</th></tr></thead><tbody><tr><td>{tab}</td><td>Tabulation</td></tr><tr><td>{reverseTab}</td><td>Reverse tabulation</td></tr><tr><td>{down}</td><td>Arrow Down</td></tr><tr><td>{right}</td><td>Arrow Right</td></tr><tr><td>{left}</td><td>Arrow Left</td></tr><tr><td>{up}</td><td>Arrow Up</td></tr></tbody></table><br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
@@ -18,16 +18,18 @@ class FrAccessibleRole extends accessible_role_1.AccessibleRole {
18
18
  name;
19
19
  definiteArticle;
20
20
  indefiniteArticle;
21
+ shouldGenerateClickSentence;
21
22
  shouldGenerateTypeSentence;
22
23
  shouldGenerateContainsSentence;
23
24
  shouldGenerateKeyboardSentence;
24
25
  shouldGenerateCheckedSentence;
25
- constructor(id, name, definiteArticle, indefiniteArticle, shouldGenerateTypeSentence = true, shouldGenerateContainsSentence = true, shouldGenerateKeyboardSentence = false, shouldGenerateCheckedSentence = false) {
26
+ constructor(id, name, definiteArticle, indefiniteArticle, shouldGenerateClickSentence = false, shouldGenerateTypeSentence = true, shouldGenerateContainsSentence = true, shouldGenerateKeyboardSentence = false, shouldGenerateCheckedSentence = false) {
26
27
  super();
27
28
  this.id = id;
28
29
  this.name = name;
29
30
  this.definiteArticle = definiteArticle;
30
31
  this.indefiniteArticle = indefiniteArticle;
32
+ this.shouldGenerateClickSentence = shouldGenerateClickSentence;
31
33
  this.shouldGenerateTypeSentence = shouldGenerateTypeSentence;
32
34
  this.shouldGenerateContainsSentence = shouldGenerateContainsSentence;
33
35
  this.shouldGenerateKeyboardSentence = shouldGenerateKeyboardSentence;
@@ -92,6 +94,7 @@ exports.FR_ROLES = [
92
94
  name: "bouton",
93
95
  definiteArticle: FR_DEFINITE_ARTICLE.LE,
94
96
  indefiniteArticle: FR_INDEFINITE_ARTICLE.UN,
97
+ shouldGenerateClickSentence: true,
95
98
  shouldGenerateKeyboardSentence: true
96
99
  },
97
100
  {
@@ -105,6 +108,7 @@ exports.FR_ROLES = [
105
108
  name: "case à cocher",
106
109
  definiteArticle: FR_DEFINITE_ARTICLE.LA,
107
110
  indefiniteArticle: FR_INDEFINITE_ARTICLE.UNE,
111
+ shouldGenerateClickSentence: true,
108
112
  shouldGenerateKeyboardSentence: true,
109
113
  shouldGenerateCheckedSentence: true
110
114
  },
@@ -240,6 +244,7 @@ exports.FR_ROLES = [
240
244
  name: "lien",
241
245
  definiteArticle: FR_DEFINITE_ARTICLE.LE,
242
246
  indefiniteArticle: FR_INDEFINITE_ARTICLE.UN,
247
+ shouldGenerateClickSentence: true,
243
248
  shouldGenerateKeyboardSentence: true
244
249
  },
245
250
  {
@@ -368,6 +373,7 @@ exports.FR_ROLES = [
368
373
  name: "bouton radio",
369
374
  definiteArticle: FR_DEFINITE_ARTICLE.LE,
370
375
  indefiniteArticle: FR_INDEFINITE_ARTICLE.UN,
376
+ shouldGenerateClickSentence: true,
371
377
  shouldGenerateKeyboardSentence: true,
372
378
  shouldGenerateCheckedSentence: true
373
379
  },
@@ -584,4 +590,4 @@ exports.FR_ROLES = [
584
590
  definiteArticle: FR_DEFINITE_ARTICLE.LA,
585
591
  indefiniteArticle: FR_INDEFINITE_ARTICLE.UNE
586
592
  }
587
- ].map((role) => new FrAccessibleRole(role.id, role.name, role.definiteArticle, role.indefiniteArticle, role.shouldGenerateContainsSentence, role.shouldGenerateContainsSentence, role.shouldGenerateKeyboardSentence, role.shouldGenerateCheckedSentence));
593
+ ].map((role) => new FrAccessibleRole(role.id, role.name, role.definiteArticle, role.indefiniteArticle, role.shouldGenerateClickSentence, role.shouldGenerateContainsSentence, role.shouldGenerateContainsSentence, role.shouldGenerateKeyboardSentence, role.shouldGenerateCheckedSentence));
@@ -6,7 +6,12 @@
6
6
  "withRole": "",
7
7
  "withContext": ""
8
8
  },
9
- "type": "",
9
+ "type": {
10
+ "withContext": ""
11
+ },
12
+ "enter": {
13
+ "withContext": ""
14
+ },
10
15
  "keyboard": {
11
16
  "multiplePress": "",
12
17
  "press": "",
@@ -1,6 +1,7 @@
1
1
  export declare abstract class AccessibleRole {
2
2
  id: string;
3
3
  name: string;
4
+ shouldGenerateClickSentence: boolean;
4
5
  shouldGenerateTypeSentence: boolean;
5
6
  shouldGenerateContainsSentence: boolean;
6
7
  shouldGenerateKeyboardSentence: boolean;
@@ -4,6 +4,7 @@ exports.AccessibleRole = void 0;
4
4
  class AccessibleRole {
5
5
  id;
6
6
  name;
7
+ shouldGenerateClickSentence;
7
8
  shouldGenerateTypeSentence;
8
9
  shouldGenerateContainsSentence;
9
10
  shouldGenerateKeyboardSentence = false;
@@ -96,6 +96,10 @@ class BasedRoleStepDefinition extends common_1.GenerateFileProcessing {
96
96
  dataUpdated = dataUpdated.replace(/\/\/ Begin of Content Section[\s\S]*?\/\/ End of Content Section/, "");
97
97
  }
98
98
  // Exclude Role based Type sentence if specified
99
+ if (!role.shouldGenerateClickSentence) {
100
+ dataUpdated = dataUpdated.replace(/\/\/ Begin of Click Section[\s\S]*?\/\/ End of Click Section/, "");
101
+ }
102
+ // Exclude Role based Type sentence if specified
99
103
  if (!role.shouldGenerateTypeSentence) {
100
104
  dataUpdated = dataUpdated.replace(/\/\/ Begin of Type Section[\s\S]*?\/\/ End of Type Section/, "");
101
105
  }
@@ -198,6 +198,8 @@ function runGenerateDoc(destDir) {
198
198
  switch (wordingsConf.section) {
199
199
  case "contains":
200
200
  return role.shouldGenerateContainsSentence;
201
+ case "click":
202
+ return role.shouldGenerateClickSentence;
201
203
  case "type":
202
204
  return role.shouldGenerateTypeSentence;
203
205
  case "keyboard":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uuv/runner-commons",
3
- "version": "2.24.0",
3
+ "version": "2.25.0",
4
4
  "type": "commonjs",
5
5
  "author": "Louis Fredice NJAKO MOLOM (https://github.com/luifr10) & Stanley SERVICAL (https://github.com/stanlee974)",
6
6
  "description": "A common lib for uuv",
@@ -71,6 +71,18 @@
71
71
  "description": "Checks that an Html element exists with the specified [accessible role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) and [name](https://russmaxdesign.github.io/html-elements-names/) and is unchecked",
72
72
  "wording": "I should see $indefiniteArticle $roleName named {string} unchecked",
73
73
  "section": "checkable"
74
+ },
75
+ {
76
+ "key": "key.when.enter",
77
+ "description": "Writes the sentence given as a parameter inside the specified field (useful for example to fill in a form field)",
78
+ "wording": "I enter the value {string} in $definiteArticle $roleName named {string}",
79
+ "section": "type"
80
+ },
81
+ {
82
+ "key": "key.when.click",
83
+ "description": "Triggers a click on the element with role $roleId and the specified name",
84
+ "wording": "I click on $roleName named {string}",
85
+ "section": "click"
74
86
  }
75
87
  ]
76
88
  }
@@ -4,16 +4,6 @@
4
4
  "description": "Triggers a click on the selected element.<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
5
5
  "wording": "I click"
6
6
  },
7
- {
8
- "key": "key.when.click.button",
9
- "description": "Triggers a click on the given button with specific name",
10
- "wording": "I click on button named {string}"
11
- },
12
- {
13
- "key": "key.when.click.link",
14
- "description": "Triggers a click on the given link with specific name",
15
- "wording": "I click on link named {string}"
16
- },
17
7
  {
18
8
  "key": "key.when.click.withRole",
19
9
  "description": "Triggers a click on the element with given role and specific name",
@@ -40,10 +30,15 @@
40
30
  "wording": "I set timeout with value {int}"
41
31
  },
42
32
  {
43
- "key": "key.when.type",
33
+ "key": "key.when.type.withContext",
44
34
  "description": "Writes the sentence passed as a parameter (useful for example to fill in a form field).<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
45
35
  "wording": "I type the sentence {string}"
46
36
  },
37
+ {
38
+ "key": "key.when.enter.withContext",
39
+ "description": "Writes the sentence passed as a parameter (useful for example to fill in a form field).<br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
40
+ "wording": "I enter the value {string}"
41
+ },
47
42
  {
48
43
  "key": "key.when.keyboard.press",
49
44
  "description": "Press specified key: <table><thead><tr><th>Key</th><th>Description</th></tr></thead><tbody><tr><td>{tab}</td><td>Tabulation</td></tr><tr><td>{reverseTab}</td><td>Reverse tabulation</td></tr><tr><td>{down}</td><td>Arrow Down</td></tr><tr><td>{right}</td><td>Arrow Right</td></tr><tr><td>{left}</td><td>Arrow Left</td></tr><tr><td>{up}</td><td>Arrow Up</td></tr></tbody></table><br/>Make sure you've selected an element beforehand with the <strong>within...</strong> phrases.",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  {
58
58
  "key": "key.when.type",
59
- "description": "Saisie de la phrase passée en paramètre dans le champ spécifié(utile par exemple pour remplir un champ de formulaire).",
59
+ "description": "Saisie de la phrase passée en paramètre dans le champ spécifié (utile par exemple pour remplir un champ de formulaire).",
60
60
  "wording": "je saisie le(s) mot(s) {string} dans $definiteArticle$roleName $namedAdjective {string}",
61
61
  "section": "type"
62
62
  },
@@ -71,6 +71,18 @@
71
71
  "description": "Vérifie l'existence d'un élément Html ayant le rôle $roleId, le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) et décoché",
72
72
  "wording": "je dois voir $indefiniteArticle $roleName $namedAdjective {string} décoché(e)",
73
73
  "section": "checkable"
74
+ },
75
+ {
76
+ "key": "key.when.enter",
77
+ "description": "Saisie de la phrase passée en paramètre dans le champ spécifié (utile par exemple pour remplir un champ de formulaire).",
78
+ "wording": "j'entre la valeur {string} dans $definiteArticle$roleName $namedAdjective {string}",
79
+ "section": "type"
80
+ },
81
+ {
82
+ "key": "key.when.click",
83
+ "description": "Déclenche un click sur l'élément Html ayant le rôle $roleId, le [nom accessible](https://russmaxdesign.github.io/html-elements-names/)",
84
+ "wording": "je clique sur $definiteArticle$roleName nommé {string}",
85
+ "section": "click"
74
86
  }
75
87
  ]
76
88
  }
@@ -4,16 +4,6 @@
4
4
  "description": "Déclenche un click sur l'élément sélectionné.<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.",
5
5
  "wording": "je clique"
6
6
  },
7
- {
8
- "key": "key.when.click.button",
9
- "description": "Déclenche un click sur le bouton avec le nom donné",
10
- "wording": "je clique sur le bouton nommé {string}"
11
- },
12
- {
13
- "key": "key.when.click.link",
14
- "description": "Déclenche un click sur le lien avec le nom donné",
15
- "wording": "je clique sur le lien nommé {string}"
16
- },
17
7
  {
18
8
  "key": "key.when.click.withRole",
19
9
  "description": "Déclenche un click sur un élément avec le rôle et le nom donnés",
@@ -40,10 +30,15 @@
40
30
  "wording": "je positionne le timeout à {int} secondes"
41
31
  },
42
32
  {
43
- "key": "key.when.type",
33
+ "key": "key.when.type.withContext",
44
34
  "description": "Saisit de la phrase passée en paramètre (utile par exemple pour remplir un champ de formulaire).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.",
45
35
  "wording": "je saisie le(s) mot(s) {string}"
46
36
  },
37
+ {
38
+ "key": "key.when.enter.withContext",
39
+ "description": "Saisit de la phrase passée en paramètre (utile par exemple pour remplir un champ de formulaire).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.",
40
+ "wording": "j'entre la valeur {string}"
41
+ },
47
42
  {
48
43
  "key": "key.when.keyboard.press",
49
44
  "description": "Simule un appui sur la touche spécifiée : <table><thead><tr><th>Touche</th><th>Description</th></tr></thead><tbody><tr><td>{tab}</td><td>Tabulation</td></tr><tr><td>{reverseTab}</td><td>Tabulation arrière</td></tr><tr><td>{down}</td><td>Flèche du bas</td></tr><tr><td>{right}</td><td>Flèche de droite</td></tr><tr><td>{left}</td><td>Flèche de gauche</td></tr><tr><td>{up}</td><td>Flèche du haut</td></tr></tbody></table>.<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.",