🚑 hotfix compatibility with new UI

Resolves #56

Issues:

* not backwards compatible with old UI
* in a sound way, E2E tests can only be developed closely connected
  to the Kalamar development (it starts with needed elements having no
  IDs...)

Change-Id: I9bdeeb6f2b2f108031628420a1e667f72c2e19b3
diff --git a/lib/korap_rc.js b/lib/korap_rc.js
index 5493190..698f5a9 100644
--- a/lib/korap_rc.js
+++ b/lib/korap_rc.js
@@ -13,57 +13,64 @@
     }
 
     async login(page, username, password) {
+        page.goto(this.korap_url);
+        await page.waitForNavigation({ waitUntil: 'networkidle2' });
         if (this.login == "") return false;
-        await page.goto(this.korap_url);
-        const username_field = await page.$("body > aside > div > fieldset > form > input[type=text]")
+        if (username == "") return false;
+        if (password == "") return false;
 
+        await page.click('.dropdown-btn');
+        await page.waitForSelector('input[name=handle_or_email]', { visible: true });
+        const username_field = await page.$("input[name=handle_or_email]")
         if (username_field != null) {
+            await username_field.focus();
             await username_field.type(username);
-            await page.keyboard.press("Tab")
+            const password_field = await page.$("input[name=pwd]")
+            await password_field.focus()
             await page.keyboard.type(password)
             await page.keyboard.press("Enter")
         } else {
             return false
         }
 
-        await page.waitForNavigation();
-        const logout = await page.$("body > header > div > a[class=logout]")
+        await page.waitForNavigation({ waitUntil: 'networkidle2' });
+        const logout = await page.$(".logout")
         if (logout == null) {
             return false
         }
 
-        let value = await page.evaluate(logout => logout.textContent, logout)
-        if (!value.match(/(Abmelden|Logout)/)) {
-            return false
-        }
         return true
     }
 
     async search(page, query) {
-        const query_field = await page.$("body > header > form > div > input[name=q]")
-        assert.notEqual(query_field, null)
-        await query_field.click({ clickCount: 3 })
-        await query_field.type(query)
-        await page.keyboard.press("Enter")
-        await page.waitForNavigation();
-        const total_results = await page.$("#total-results")
-        assert.notEqual(total_results, null, "cannot find total results")
-        const hits = Number((await page.evaluate(total_results => total_results.textContent, total_results)).replace(/[,.]/g, ""))
-        return hits
+        const query_field = await page.$("#q-field");
+        assert.notEqual(query_field, null, "Query field not found");
+
+        await page.waitForSelector("#q-field", { visible: true });
+        await query_field.click({ clickCount: 3 });
+        await page.keyboard.type(query);
+        await page.keyboard.press("Enter");
+
+        await page.waitForNavigation({ waitUntil: 'networkidle2' });
+        const total_results = await page.$("#total-results");
+        assert.notEqual(total_results, null, "Cannot find total results");
+
+        const hits = Number((await page.evaluate(total_results => total_results.textContent, total_results)).replace(/[,.]/g, ""));
+        return hits;
     }
 
     async logout(page) {
-        const logout_button = await page.$("a[class=logout]")
+        await page.click('.dropdown-btn');
+        await page.waitForSelector('.logout', { visible: true });
+        const logout_button = await page.$(".logout")
         if (logout_button == null) {
+            console.log("Logout button not found")
             return false
         }
-        await page.click("a[class=logout]")
-        await page.waitForSelector('article.alertify-log');
-        const hasSuccessClass = await page.evaluate(() => {
-            const article = document.querySelector('article.alertify-log');
-            return article.classList.contains('alertify-log-success');
-          });
-        return hasSuccessClass
+        await logout_button.click()
+        await page.waitForNavigation({ waitUntil: 'networkidle2' });
+        const loginField = await page.$('input[name=handle_or_email]');
+        return loginField !== null;
     }
 
     async assure_glimpse_off(page) {
diff --git a/test/korap-ui.js b/test/korap-ui.js
index a71ebf4..68a8778 100644
--- a/test/korap-ui.js
+++ b/test/korap-ui.js
@@ -36,10 +36,12 @@
     before(async () => {
         browser = await puppeteer.launch({
             headless: "new",
+            // headless: false,
+            // args: [`--window-size=1920,1080`],
         })
         page = await browser.newPage()
         await page.setViewport({
-            width: 1280,
+            width: 1980,
             height: 768,
             deviceScaleFactor: 1,
           });
@@ -63,7 +65,8 @@
 
     it('KorAP UI is up and running',
         (async () => {
-            await await page.goto(KORAP_URL);
+            page.goto(KORAP_URL);
+            await page.waitForNavigation({ waitUntil: 'networkidle2' });
             const query_field = await page.$("#q-field")
             assert.isNotNull(query_field, "#q-field not found. Kalamar not running?");
         }))