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?");
         }))
