From b6e9f72ec38800808f760ea61c9dd52cf0c19c60 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Mon, 7 Sep 2020 15:31:25 +0200
Subject: [PATCH] Update e2e

update protractor method for mat-select
---
 e2e/calculator.po.ts                 |  5 ++---
 e2e/load-linked-params.e2e-spec.ts   | 15 ++++++++++++---
 e2e/load-malformed-files.e2e-spec.ts | 13 ++++++++++++-
 e2e/navbar.po.ts                     |  9 ++++-----
 e2e/preferences.po.ts                |  5 ++---
 e2e/solveur.e2e-spec.ts              | 15 +++++++++------
 protractor.conf.js                   |  3 +--
 7 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts
index 7fe9dfb7a..ffe8a5f4e 100644
--- a/e2e/calculator.po.ts
+++ b/e2e/calculator.po.ts
@@ -217,9 +217,8 @@ export class CalculatorPage {
 
     async changeSelectValue(elt: ElementFinder, index: number) {
         await elt.click();
-        const options = (await elt.getAttribute("aria-owns")).split(" ");
-        const optId = options[index];
-        const option = element(by.id(optId));
+        const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")";
+        const option = element(by.css(optionId));
         await option.click();
     }
 
diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts
index 81a1651bd..8e87b5f94 100644
--- a/e2e/load-linked-params.e2e-spec.ts
+++ b/e2e/load-linked-params.e2e-spec.ts
@@ -4,6 +4,7 @@ import { CalculatorPage } from "./calculator.po";
 import { Navbar } from "./navbar.po";
 import { SideNav } from "./sidenav.po";
 import { browser } from "protractor";
+import { PreferencesPage } from "./preferences.po";
 
 /**
  * Load a session containing 5 calculators, having multiple linked parameters
@@ -14,21 +15,29 @@ describe("ngHyd − load session with multiple linked parameters − ", () => {
     let startPage: AppPage;
     let listPage: ListPage;
     let calcPage: CalculatorPage;
+    let prefPage: PreferencesPage;
     let navbar: Navbar;
     let sidenav: SideNav;
 
     function init() {
         startPage = new AppPage();
         calcPage = new CalculatorPage();
+        prefPage = new PreferencesPage();
         navbar = new Navbar();
         sidenav = new SideNav();
         listPage = new ListPage();
     }
-    beforeEach(init);
+    beforeAll(init);
 
-    it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => {
-        await startPage.navigateTo();
+    beforeEach(async () => {
+        // force language to prevent issues due to default browser language
+        await prefPage.navigateTo();
+        await prefPage.changeLanguage(1); // fr
+        await browser.sleep(200);
+        await navbar.clickNewCalculatorButton();
+    });
 
+    it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => {
         await navbar.clickMenuButton();
         await browser.sleep(200);
 
diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts
index e022c9021..995d819e0 100644
--- a/e2e/load-malformed-files.e2e-spec.ts
+++ b/e2e/load-malformed-files.e2e-spec.ts
@@ -2,6 +2,7 @@ import { AppPage } from "./app.po";
 import { Navbar } from "./navbar.po";
 import { SideNav } from "./sidenav.po";
 import { browser, element, by } from "protractor";
+import { PreferencesPage } from "./preferences.po";
 
 /**
  * Load 4 malformed session files :
@@ -15,13 +16,23 @@ describe("ngHyd − load malformed session files − ", () => {
     let startPage: AppPage;
     let navbar: Navbar;
     let sidenav: SideNav;
+    let prefPage: PreferencesPage;
 
     function init() {
         startPage = new AppPage();
         navbar = new Navbar();
         sidenav = new SideNav();
+        prefPage = new PreferencesPage();
     }
-    beforeEach(init);
+    beforeAll(init);
+
+    beforeEach(async () => {
+        // force language to prevent issues due to default browser language
+        await prefPage.navigateTo();
+        await prefPage.changeLanguage(1); // fr
+        await browser.sleep(200);
+        await navbar.clickNewCalculatorButton();
+    });
 
     it("when loading session-bad-syntax.json, displayed error should be relevant", async () => {
         await startPage.navigateTo();
diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts
index 739d5bd0a..2c498a4bd 100644
--- a/e2e/navbar.po.ts
+++ b/e2e/navbar.po.ts
@@ -14,9 +14,9 @@ export class Navbar {
         const dropDown = element(by.css("mat-select#selectCalculator"));
         if (await dropDown.isPresent() && await dropDown.isDisplayed()) {
             await dropDown.click();
-            const options = (await dropDown.getAttribute("aria-owns")).split(" ");
+            const options = element.all(by.css(".cdk-overlay-container mat-option"));
             await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown
-            return options.length;
+            return await options.count();
         } else {
             return (await element.all(by.css("#tabs-container button.calculator-button"))).length;
         }
@@ -31,9 +31,8 @@ export class Navbar {
         const dropDown = element(by.css("mat-select#selectCalculator"));
         if (await dropDown.isPresent() && await dropDown.isDisplayed()) {
             await dropDown.click();
-            const options = (await dropDown.getAttribute("aria-owns")).split(" ");
-            const optId = options[n];
-            const option = element(by.id(optId));
+            const optionId = ".cdk-overlay-container mat-option#mat-option-" + n;
+            const option = element(by.css(optionId));
             await option.click();
         } else {
             const tabs = this.getAllCalculatorTabs();
diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts
index 038b2d18d..016d2da96 100644
--- a/e2e/preferences.po.ts
+++ b/e2e/preferences.po.ts
@@ -36,9 +36,8 @@ export class PreferencesPage {
     async changeLanguage(index: number) {
         const select = this.getLanguageSelect();
         await select.click();
-        const options = (await select.getAttribute("aria-owns")).split(" ");
-        const optId = options[index];
-        const option = element(by.id(optId));
+        const optionId = ".cdk-overlay-container mat-option#mat-option-" + index;
+        const option = element(by.css(optionId));
         await option.click();
     }
 
diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts
index 334625f50..a8d012318 100644
--- a/e2e/solveur.e2e-spec.ts
+++ b/e2e/solveur.e2e-spec.ts
@@ -17,22 +17,27 @@ describe("Solveur - ", () => {
     let sidenav: SideNav;
     let prefPage: PreferencesPage;
 
-    beforeEach(async () => {
+    beforeAll(async () => {
         startPage = new AppPage();
         prefPage = new PreferencesPage();
         listPage = new ListPage();
         calcPage = new CalculatorPage();
         navbar = new Navbar();
         sidenav = new SideNav();
-        // disable evil option "empty fields on module creation"
+    });
+
+    beforeEach(async () => {
         await prefPage.navigateTo();
+        // disable evil option "empty fields on module creation"
         await prefPage.disableEvilEmptyFields();
         await browser.sleep(200);
+        // force language to prevent issues due to default browser language
+        await prefPage.changeLanguage(1); // fr
+        await browser.sleep(200);
+        await navbar.clickNewCalculatorButton();
     });
 
     it("load > calculate", async () => {
-        await navbar.clickNewCalculatorButton();
-
         await navbar.clickMenuButton();
         await browser.sleep(200);
 
@@ -78,8 +83,6 @@ describe("Solveur - ", () => {
     });
 
     it("create > feed > calculate > clone > calculate clone", async () => {
-        await navbar.clickNewCalculatorButton();
-
         // 1. create empty Solveur
         await listPage.clickMenuEntryForCalcType(22); // Solveur
         await browser.sleep(500);
diff --git a/protractor.conf.js b/protractor.conf.js
index f11305504..d474c230b 100644
--- a/protractor.conf.js
+++ b/protractor.conf.js
@@ -37,8 +37,7 @@ exports.config = {
       args: [
         "--no-sandbox",
         "--headless",
-        "--window-size=1024x768",
-        "lang=fr-FR"
+        "--window-size=1024x768"
       ],
       prefs: {
         download: {
-- 
GitLab