diff --git a/.gitignore b/.gitignore
index 2fc7e6a605d472b6a38cee6ad51a0d3c6593dddd..cf82de486f605007f5db8a324f7ab160327de993 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /node_modules
-/reports-tmp
\ No newline at end of file
+/reports-tmp
+/environment.json
\ No newline at end of file
diff --git a/helpers/WindowManager.js b/helpers/WindowManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..b82a58cdeed81cfecb4f9bcda41df02ad2ff31fd
--- /dev/null
+++ b/helpers/WindowManager.js
@@ -0,0 +1,10 @@
+class WindowManager {
+    switchToNextTab(closeCurrentTab) {
+        browser.getAllWindowHandles().then(handles => {
+            if (closeCurrentTab) browser.driver.close();
+            browser.driver.switchTo().window(handles[1]);
+        });
+    }
+}
+
+module.exports = new WindowManager();
diff --git a/package-lock.json b/package-lock.json
index ee0e06d863de580017a626ca601d6f950d4ff48c..92e770050138a42868007ae4d73a222d58a44fb7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,18 +8,16 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
       "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
-      "dev": true,
       "requires": {
         "@babel/highlight": "^7.0.0"
       }
     },
     "@babel/generator": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz",
-      "integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==",
-      "dev": true,
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
+      "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
       "requires": {
-        "@babel/types": "^7.1.5",
+        "@babel/types": "^7.2.2",
         "jsesc": "^2.5.1",
         "lodash": "^4.17.10",
         "source-map": "^0.5.0",
@@ -30,7 +28,6 @@
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
       "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
-      "dev": true,
       "requires": {
         "@babel/helper-get-function-arity": "^7.0.0",
         "@babel/template": "^7.1.0",
@@ -41,7 +38,6 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
       "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
-      "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
       }
@@ -50,7 +46,6 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
       "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
-      "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
       }
@@ -59,7 +54,6 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
       "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
-      "dev": true,
       "requires": {
         "chalk": "^2.0.0",
         "esutils": "^2.0.2",
@@ -67,55 +61,40 @@
       }
     },
     "@babel/parser": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz",
-      "integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==",
-      "dev": true
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
+      "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA=="
     },
     "@babel/template": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz",
-      "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
-      "dev": true,
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+      "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.1.2",
-        "@babel/types": "^7.1.2"
+        "@babel/parser": "^7.2.2",
+        "@babel/types": "^7.2.2"
       }
     },
     "@babel/traverse": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz",
-      "integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==",
-      "dev": true,
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+      "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.1.5",
+        "@babel/generator": "^7.2.2",
         "@babel/helper-function-name": "^7.1.0",
         "@babel/helper-split-export-declaration": "^7.0.0",
-        "@babel/parser": "^7.1.5",
-        "@babel/types": "^7.1.5",
-        "debug": "^3.1.0",
+        "@babel/parser": "^7.2.3",
+        "@babel/types": "^7.2.2",
+        "debug": "^4.1.0",
         "globals": "^11.1.0",
         "lodash": "^4.17.10"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        }
       }
     },
     "@babel/types": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz",
-      "integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==",
-      "dev": true,
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
+      "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
       "requires": {
         "esutils": "^2.0.2",
         "lodash": "^4.17.10",
@@ -167,7 +146,6 @@
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
       "requires": {
         "color-convert": "^1.9.0"
       }
@@ -206,7 +184,6 @@
       "version": "10.0.1",
       "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz",
       "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==",
-      "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
         "@babel/parser": "^7.0.0",
@@ -220,7 +197,6 @@
           "version": "3.7.1",
           "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
           "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-          "dev": true,
           "requires": {
             "esrecurse": "^4.1.0",
             "estraverse": "^4.1.1"
@@ -269,7 +245,6 @@
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
       "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
-      "dev": true,
       "requires": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -307,7 +282,6 @@
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -315,8 +289,7 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "colors": {
       "version": "1.1.2",
@@ -347,7 +320,6 @@
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
       "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
-      "dev": true,
       "requires": {
         "ms": "^2.1.1"
       }
@@ -390,8 +362,7 @@
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "dev": true
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
     "eslint": {
       "version": "5.9.0",
@@ -475,8 +446,7 @@
     "eslint-visitor-keys": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
-      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
-      "dev": true
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
     },
     "espree": {
       "version": "4.1.0",
@@ -508,7 +478,6 @@
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
-      "dev": true,
       "requires": {
         "estraverse": "^4.1.0"
       }
@@ -516,14 +485,12 @@
     "estraverse": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
-      "dev": true
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
     },
     "esutils": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
     },
     "external-editor": {
       "version": "3.0.3",
@@ -625,8 +592,7 @@
     "globals": {
       "version": "11.8.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz",
-      "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==",
-      "dev": true
+      "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA=="
     },
     "globby": {
       "version": "6.1.0",
@@ -658,8 +624,7 @@
     "has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-      "dev": true
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
     },
     "iconv-lite": {
       "version": "0.4.24",
@@ -779,8 +744,7 @@
     "js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
     },
     "js-yaml": {
       "version": "3.12.0",
@@ -795,8 +759,7 @@
     "jsesc": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-      "dev": true
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
     },
     "json-schema-traverse": {
       "version": "0.4.1",
@@ -841,8 +804,7 @@
     "lodash": {
       "version": "4.17.11",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
-      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
-      "dev": true
+      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
     },
     "make-error": {
       "version": "1.3.5",
@@ -880,8 +842,7 @@
     "ms": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-      "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-      "dev": true
+      "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
     },
     "mute-stream": {
       "version": "0.0.7",
@@ -1131,8 +1092,7 @@
     "source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
     },
     "source-map-support": {
       "version": "0.5.9",
@@ -1187,7 +1147,6 @@
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
       "requires": {
         "has-flag": "^3.0.0"
       }
@@ -1228,14 +1187,12 @@
     "to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-      "dev": true
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
     },
     "trim-right": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-      "dev": true
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
     },
     "ts-node": {
       "version": "7.0.1",
@@ -1293,12 +1250,6 @@
         "prelude-ls": "~1.1.2"
       }
     },
-    "typescript": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz",
-      "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==",
-      "dev": true
-    },
     "underscore": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
diff --git a/package.json b/package.json
index 90763f559947d56abc9a92a3aab7df0642b2878a..1bbde2cb4f20e39564475242212c7c762a198d2b 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
   "description": "",
   "main": "protractor.conf.js",
   "dependencies": {
-    "@types/jasmine": "^2.8.11"
+    "@types/jasmine": "^2.8.11",
+    "babel-eslint": "^10.0.1"
   },
   "devDependencies": {
     "babel-eslint": "^10.0.1",
@@ -12,8 +13,7 @@
     "eslint-config-google": "^0.11.0",
     "jasmine-spec-reporter": "^4.2.1",
     "protractor-beautiful-reporter": "^1.2.7",
-    "ts-node": "^7.0.1",
-    "typescript": "^3.1.6"
+    "ts-node": "^7.0.1"
   },
   "scripts": {
     "test": "protractor protractor.conf.js"
diff --git a/pageObjects/elements/Trombinoscope.po.js b/pageObjects/elements/Trombinoscope.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fc47ab205ff54170080f4964f929ecf9a992f37
--- /dev/null
+++ b/pageObjects/elements/Trombinoscope.po.js
@@ -0,0 +1,23 @@
+class Trombinoscope {
+    getLastNameInput() {
+        return element(by.id('sindiv:LeNom'));
+    }
+
+    getFirstNameInput() {
+        return element(by.id('sindiv:LePrenom'));
+    }
+
+    getSubmitButton() {
+        return element(by.id('sindiv:j_idt20'));
+    }
+
+    getResultName() {
+        return element.all(by.className('TrombiTitre fn')).get(0);
+    }
+
+    getAllResultsName() {
+        return element.all(by.className('TrombiTitre fn'));
+    }
+}
+
+module.exports = new Trombinoscope();
diff --git a/pageObjects/pages/Demeter.po.js b/pageObjects/pages/Demeter.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..162126e869b093d6e146223e46bc9ba57ad4330e
--- /dev/null
+++ b/pageObjects/pages/Demeter.po.js
@@ -0,0 +1,15 @@
+class Demeter {
+    getEtuDetails() {
+        return element.all(by.css('.titre')).get(0);
+    }
+
+    getAdviserDetails() {
+        return element.all(by.css('.titre')).get(3);
+    }
+
+    getBaseURI() {
+        return 'https://demeter.utc.fr';
+    }
+}
+
+module.exports = new Demeter();
diff --git a/pageObjects/pages/Index.po.js b/pageObjects/pages/Index.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..a62f567f0b053a0edced03ccb0602da95f8bcfe1
--- /dev/null
+++ b/pageObjects/pages/Index.po.js
@@ -0,0 +1,15 @@
+class Index {
+    getTrombinoscopeButton() {
+        return $('#btnTrombi');
+    }
+
+    getEtuDirectoryButton() {
+        return element(by.cssContainingText('a', 'Mon dossier étudiant'));
+    }
+
+    goToEtuDirectory() {
+        this.getEtuDirectoryButton().click();
+    }
+}
+
+module.exports = new Index();
diff --git a/pageObjects/pages/Login.po.js b/pageObjects/pages/Login.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..107009843679ea74acee1d1dc2aaba492d4a1ef3
--- /dev/null
+++ b/pageObjects/pages/Login.po.js
@@ -0,0 +1,15 @@
+class Login {
+    getUsername() {
+        return $('#username');
+    }
+
+    getPassword() {
+        return $('#password');
+    }
+
+    getSubmitButton() {
+        return element(by.name('Submit1'));
+    }
+}
+
+module.exports = new Login();
diff --git a/pageObjects/pages/index.po.js b/pageObjects/pages/index.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..a62f567f0b053a0edced03ccb0602da95f8bcfe1
--- /dev/null
+++ b/pageObjects/pages/index.po.js
@@ -0,0 +1,15 @@
+class Index {
+    getTrombinoscopeButton() {
+        return $('#btnTrombi');
+    }
+
+    getEtuDirectoryButton() {
+        return element(by.cssContainingText('a', 'Mon dossier étudiant'));
+    }
+
+    goToEtuDirectory() {
+        this.getEtuDirectoryButton().click();
+    }
+}
+
+module.exports = new Index();
diff --git a/pageObjects/pages/login.po.js b/pageObjects/pages/login.po.js
new file mode 100644
index 0000000000000000000000000000000000000000..107009843679ea74acee1d1dc2aaba492d4a1ef3
--- /dev/null
+++ b/pageObjects/pages/login.po.js
@@ -0,0 +1,15 @@
+class Login {
+    getUsername() {
+        return $('#username');
+    }
+
+    getPassword() {
+        return $('#password');
+    }
+
+    getSubmitButton() {
+        return element(by.name('Submit1'));
+    }
+}
+
+module.exports = new Login();
diff --git a/protractor.conf.js b/protractor.conf.js
index a624ffb2b8ec330349b6b1a4c5940a1bd2927ad1..64a121be20c60889aeb8f24cbb6ccc4084a2dc72 100644
--- a/protractor.conf.js
+++ b/protractor.conf.js
@@ -1,6 +1,7 @@
 const HtmlReporter = require('protractor-beautiful-reporter');
-const {SpecReporter} = require('jasmine-spec-reporter');
+const { SpecReporter } = require('jasmine-spec-reporter');
 const path = require('path');
+const auth = require('./environment.json');
 
 exports.config = {
     allScriptsTimeout: 11000,
@@ -11,60 +12,69 @@ exports.config = {
     seleniumPort: null,
     seleniumArgs: [],
 
-    specs: [
-        './specs/*.spec.js',
-    ],
+    specs: ['./specs/*.spec.js'],
+
+    params: {
+        username: auth.username,
+        password: auth.password
+    },
 
     capabilities: {
         browserName: 'chrome',
         chromeOptions: {
             args: ['--window-size=1910,1080'],
-        },
+            prefs: {
+                download: {
+                    prompt_for_download: false,
+                    directory_upgrade: true,
+                    default_directory: './reports-tmp'
+                }
+            }
+        }
     },
 
     // A base URL for your application under test. Calls to protractor.get()
     // with relative paths will be prepended with this.
-    baseUrl: 'http://localhost:9999',
+    baseUrl: 'https://webapplis.utc.fr/ent/',
     directConnect: true,
 
     framework: 'jasmine',
 
     onPrepare: function() {
-        jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}}));
-        
+        jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+
         // Add a screenshot reporter:
-        jasmine.getEnv().addReporter(new HtmlReporter({
-            preserveDirectory: true,
-            takeScreenShotsOnlyForFailedSpecs: true,
-            screenshotsSubfolder: 'images',
-            jsonsSubfolder: 'jsons',
-            baseDirectory: 'reports-tmp',
-            clientDefaults: {
-                columnSettings: {
-                    displaySessionId: false,
+        jasmine.getEnv().addReporter(
+            new HtmlReporter({
+                preserveDirectory: false,
+                takeScreenShotsOnlyForFailedSpecs: true,
+                screenshotsSubfolder: 'images',
+                jsonsSubfolder: 'jsons',
+                baseDirectory: 'reports-tmp',
+                clientDefaults: {
+                    columnSettings: {
+                        displaySessionId: false
+                    }
                 },
-            },
-            pathBuilder: function pathBuilder(spec, descriptions, results, capabilities) {
-                const currentDate = new Date();
-                const day = currentDate.getDate();
-                const month = currentDate.getMonth() + 1;
-                const year = currentDate.getFullYear();
-                const time = currentDate.getHours() + ':' + currentDate.getMinutes() + '-' + currentDate.getSeconds();
+                pathBuilder: function pathBuilder(spec, descriptions, results, capabilities) {
+                    const currentDate = new Date();
+                    const day = currentDate.getDate();
+                    const month = currentDate.getMonth() + 1;
+                    const year = currentDate.getFullYear();
+                    const time = currentDate.getHours();
 
-                const validDescriptions = descriptions.map(function(description) {
-                    return description.replace('/', '@');
-                });
+                    const validDescriptions = descriptions.map(function(description) {
+                        return description.replace('/', '@');
+                    });
 
-                return path.join(
-                    day + '-' + month + '-' + year +'-'+ time,
-                    validDescriptions.join('-'));
-            },
-        }).getJasmine2Reporter());
+                    return path.join(year + '-' + month + '-' + day + '-' + time, validDescriptions.join('-'));
+                }
+            }).getJasmine2Reporter()
+        );
     },
-
     jasmineNodeOpts: {
         showColors: true,
         defaultTimeoutInterval: 30000,
-        print: function() {},
-    },
+        print: function() {}
+    }
 };
diff --git a/specs/1_Login.spec.js b/specs/1_Login.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..73e6970697b60e5e22ba5a27686ba0e639c82e08
--- /dev/null
+++ b/specs/1_Login.spec.js
@@ -0,0 +1,26 @@
+const Login = require('../pageObjects/pages/Login.po.js');
+const EC = protractor.ExpectedConditions;
+
+describe('Authentication', () => {
+    beforeAll(function() {
+        browser.ignoreSynchronization = true;
+        browser.get('index.jsf');
+    });
+
+    it('should enter username', () => {
+        let username = Login.getUsername();
+        username.sendKeys(browser.params.username);
+        expect(username.getAttribute('value')).toBe(browser.params.username);
+    });
+
+    it('should enter password', () => {
+        let password = Login.getPassword();
+        password.sendKeys(browser.params.password);
+        expect(password.getAttribute('value')).toBe(browser.params.password);
+    });
+
+    it('should submit and be logged in', () => {
+        Login.getSubmitButton().click();
+        browser.wait(EC.urlContains('https://webapplis.utc.fr/ent/index.jsf'), 10000)
+    });
+});
diff --git a/specs/2_Trombinoscope.spec.js b/specs/2_Trombinoscope.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..6146896d540c70c7a3bbba21e2984f9700825b34
--- /dev/null
+++ b/specs/2_Trombinoscope.spec.js
@@ -0,0 +1,26 @@
+const Index = require('../pageObjects/pages/index.po');
+const Trombinoscope = require('../pageObjects/elements/Trombinoscope.po');
+const EC = protractor.ExpectedConditions;
+
+describe('Trombinoscope', () => {
+    beforeAll(() => {
+        browser.ignoreSynchronization = true;
+        browser.get('index.jsf');
+    });
+
+    it('should expand the Trombinoscope', () => {
+        Index.getTrombinoscopeButton().click();
+    });
+
+    it('should type in Sallak', function() {
+        let nameInput = Trombinoscope.getLastNameInput();
+        browser.wait(EC.elementToBeClickable(nameInput), 2000);
+        nameInput.sendKeys('Sallak');
+        Trombinoscope.getSubmitButton().click();
+    });
+
+    it('should find Mohamed Sallak', function() {
+        browser.sleep(2000);
+        expect(Trombinoscope.getResultName().getText()).toBe('SALLAK Mohamed');
+    });
+});
diff --git a/specs/3_Demeter.spec.js b/specs/3_Demeter.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..443573aa1c937e40e6b1c35aa01fdcc82fe1c3da
--- /dev/null
+++ b/specs/3_Demeter.spec.js
@@ -0,0 +1,21 @@
+const Index = require('../pageObjects/pages/Index.po');
+const Demeter = require('../pageObjects/pages/Demeter.po');
+const WindowManager = require('../helpers/WindowManager');
+const EC = protractor.ExpectedConditions;
+
+describe('Certficate Download', () => {
+    beforeAll(() => {
+        browser.ignoreSynchronization = true;
+        browser.get('index.jsf');
+    });
+
+    it('should click the button to the etu directory server', () => {
+        Index.goToEtuDirectory();
+    });
+
+    it('should be on demeter server', () => {
+        WindowManager.switchToNextTab(true);
+        browser.wait(EC.urlContains(Demeter.getBaseURI()), 10000);
+        browser.sleep(5000);
+    });
+});
diff --git a/specs/test.spec.js b/specs/test.spec.js
deleted file mode 100644
index 00d0346b00d17cd3128dcff6de5da7de72a6b260..0000000000000000000000000000000000000000
--- a/specs/test.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-describe('Protractor Demo App', function() {
-    const firstNumber = element(by.model('first'));
-    const secondNumber = element(by.model('second'));
-    const goButton = element(by.id('gobutton'));
-    // const latestResult = element(by.binding('latest'));
-    const history = element.all(by.repeater('result in memory'));
-
-    /**
-     *
-     * @param {*} a
-     * @param {*} b
-     */
-    function add(a, b) {
-        firstNumber.sendKeys(a);
-        secondNumber.sendKeys(b);
-        goButton.click();
-    }
-
-    beforeEach(function() {
-        browser.get('http://juliemr.github.io/protractor-demo/');
-    });
-
-    it('should have a history', function() {
-        add(1, 2);
-        add(3, 4);
-
-        expect(history.count()).toEqual(2);
-
-        add(5, 6);
-
-        expect(history.count()).toEqual(3); // This is wrong!
-    });
-
-    it('should like corentin', function() {
-        expect(true).toBe(true);
-    });
-});