Marc Kupietz | 55fc316 | 2022-12-04 16:25:49 +0100 | [diff] [blame] | 1 | const chai = require('chai'); |
| 2 | const assert = chai.assert; |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 3 | |
| 4 | class KorAPRC { |
| 5 | korap_url = "" |
| 6 | |
| 7 | constructor(korap_url) { |
| 8 | this.korap_url = korap_url |
| 9 | } |
| 10 | |
| 11 | static new(korap_url) { |
| 12 | return new KorAPRC(korap_url) |
| 13 | } |
| 14 | |
| 15 | async login(page, username, password) { |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 16 | page.goto(this.korap_url); |
| 17 | await page.waitForNavigation({ waitUntil: 'networkidle2' }); |
Marc Kupietz | 55fc316 | 2022-12-04 16:25:49 +0100 | [diff] [blame] | 18 | if (this.login == "") return false; |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 19 | if (username == "") return false; |
| 20 | if (password == "") return false; |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 21 | |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 22 | await page.click('.dropdown-btn'); |
| 23 | await page.waitForSelector('input[name=handle_or_email]', { visible: true }); |
| 24 | const username_field = await page.$("input[name=handle_or_email]") |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 25 | if (username_field != null) { |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 26 | await username_field.focus(); |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 27 | await username_field.type(username); |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 28 | const password_field = await page.$("input[name=pwd]") |
| 29 | await password_field.focus() |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 30 | await page.keyboard.type(password) |
| 31 | await page.keyboard.press("Enter") |
Marc Kupietz | e533ca8 | 2022-12-06 07:53:22 +0100 | [diff] [blame] | 32 | } else { |
| 33 | return false |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 34 | } |
| 35 | |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 36 | await page.waitForNavigation({ waitUntil: 'networkidle2' }); |
| 37 | const logout = await page.$(".logout") |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 38 | if (logout == null) { |
| 39 | return false |
| 40 | } |
| 41 | |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 42 | return true |
| 43 | } |
| 44 | |
| 45 | async search(page, query) { |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 46 | const query_field = await page.$("#q-field"); |
| 47 | assert.notEqual(query_field, null, "Query field not found"); |
| 48 | |
| 49 | await page.waitForSelector("#q-field", { visible: true }); |
| 50 | await query_field.click({ clickCount: 3 }); |
| 51 | await page.keyboard.type(query); |
| 52 | await page.keyboard.press("Enter"); |
| 53 | |
| 54 | await page.waitForNavigation({ waitUntil: 'networkidle2' }); |
| 55 | const total_results = await page.$("#total-results"); |
| 56 | assert.notEqual(total_results, null, "Cannot find total results"); |
| 57 | |
| 58 | const hits = Number((await page.evaluate(total_results => total_results.textContent, total_results)).replace(/[,.]/g, "")); |
| 59 | return hits; |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 60 | } |
| 61 | |
| 62 | async logout(page) { |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 63 | await page.click('.dropdown-btn'); |
| 64 | await page.waitForSelector('.logout', { visible: true }); |
| 65 | const logout_button = await page.$(".logout") |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 66 | if (logout_button == null) { |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 67 | console.log("Logout button not found") |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 68 | return false |
| 69 | } |
Marc Kupietz | 9e0f519 | 2025-03-09 12:12:16 +0100 | [diff] [blame^] | 70 | await logout_button.click() |
| 71 | await page.waitForNavigation({ waitUntil: 'networkidle2' }); |
| 72 | const loginField = await page.$('input[name=handle_or_email]'); |
| 73 | return loginField !== null; |
Marc Kupietz | 5e45a2f | 2022-12-03 15:32:40 +0100 | [diff] [blame] | 74 | } |
| 75 | |
| 76 | async assure_glimpse_off(page) { |
| 77 | const glimpse = await page.$("input[name=cutoff]") |
| 78 | const glimpse_value = await (await glimpse.getProperty('checked')).jsonValue() |
| 79 | if (glimpse_value) { |
| 80 | await page.click("#glimpse") |
| 81 | } |
| 82 | |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | module.exports = KorAPRC |