From b9cb7fe46f1aede8e0c52a8371b331bcdc90335a Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 20 Mar 2021 11:42:08 +0900 Subject: Fix and stabilize e2e test --- e2e/lib/Page.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'e2e') diff --git a/e2e/lib/Page.ts b/e2e/lib/Page.ts index 6531f19..5db97da 100644 --- a/e2e/lib/Page.ts +++ b/e2e/lib/Page.ts @@ -15,13 +15,13 @@ export default class Page { private constructor(private webdriver: WebDriver) {} static async currentContext(webdriver: WebDriver): Promise { - await Page.waitForConsoleLoaded(webdriver); + await Page.waitForPageCompleted(webdriver); return new Page(webdriver); } static async navigateTo(webdriver: WebDriver, url: string): Promise { await webdriver.navigate().to(url); - await Page.waitForConsoleLoaded(webdriver); + await Page.waitForPageCompleted(webdriver); return new Page(webdriver); } @@ -34,17 +34,20 @@ export default class Page { async navigateTo(url: string): Promise { await this.webdriver.navigate().to(url); - await Page.waitForConsoleLoaded(this.webdriver); + await Page.waitForPageCompleted(this.webdriver); return new Page(this.webdriver); } async showConsole(): Promise { - const iframe = this.webdriver.findElement( - By.css("#vimvixen-console-frame") - ); + await this.webdriver.switchTo().frame(0); + await Page.waitForDocumentCompleted(this.webdriver); + await this.webdriver.switchTo().parentFrame(); + await new Promise((resolve) => setTimeout(resolve, 100)); await this.sendKeys(":"); + const iframe = this.webdriver.findElement(By.id("vimvixen-console-frame")); await this.webdriver.wait(until.elementIsVisible(iframe)); + await this.webdriver.switchTo().frame(0); await this.webdriver.wait(until.elementLocated(By.css("input"))); return new Console(this.webdriver); @@ -113,14 +116,19 @@ export default class Page { return hints; } - private static async waitForConsoleLoaded(webdriver: WebDriver) { + private static async waitForPageCompleted(webdriver: WebDriver) { const topFrame = await webdriver.executeScript(() => window.top === window); if (!topFrame) { return; } + return this.waitForDocumentCompleted(webdriver); + } + + private static async waitForDocumentCompleted(webdriver: WebDriver) { await webdriver.wait( - until.elementLocated(By.css("iframe.vimvixen-console-frame")) + async () => + (await webdriver.executeScript("return document.readyState")) === + "complete" ); - await new Promise((resolve) => setTimeout(resolve, 100)); } } -- cgit v1.2.3 From b89a87220f93844a95266638b9eb01ec74732fb0 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 21 Mar 2021 16:52:38 +0900 Subject: stabilize e2e --- e2e/lib/Page.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'e2e') diff --git a/e2e/lib/Page.ts b/e2e/lib/Page.ts index 5db97da..46d67b0 100644 --- a/e2e/lib/Page.ts +++ b/e2e/lib/Page.ts @@ -35,20 +35,18 @@ export default class Page { async navigateTo(url: string): Promise { await this.webdriver.navigate().to(url); await Page.waitForPageCompleted(this.webdriver); + + await new Promise((resolve) => setTimeout(resolve, 200)); + return new Page(this.webdriver); } async showConsole(): Promise { - await this.webdriver.switchTo().frame(0); - await Page.waitForDocumentCompleted(this.webdriver); - await this.webdriver.switchTo().parentFrame(); - await new Promise((resolve) => setTimeout(resolve, 100)); - await this.sendKeys(":"); const iframe = this.webdriver.findElement(By.id("vimvixen-console-frame")); await this.webdriver.wait(until.elementIsVisible(iframe)); - await this.webdriver.switchTo().frame(0); + await this.webdriver.switchTo().frame(iframe); await this.webdriver.wait(until.elementLocated(By.css("input"))); return new Console(this.webdriver); } @@ -57,9 +55,8 @@ export default class Page { const iframe = this.webdriver.findElement( By.css("#vimvixen-console-frame") ); - await this.webdriver.wait(until.elementIsVisible(iframe)); - await this.webdriver.switchTo().frame(0); + await this.webdriver.switchTo().frame(iframe); return new Console(this.webdriver); } @@ -116,12 +113,19 @@ export default class Page { return hints; } - private static async waitForPageCompleted(webdriver: WebDriver) { + private static async waitForPageCompleted( + webdriver: WebDriver + ): Promise { + this.waitForDocumentCompleted(webdriver); + const topFrame = await webdriver.executeScript(() => window.top === window); if (!topFrame) { return; } - return this.waitForDocumentCompleted(webdriver); + await webdriver.wait(until.elementLocated(By.id("vimvixen-console-frame"))); + await webdriver.switchTo().frame(0); + await Page.waitForDocumentCompleted(webdriver); + await webdriver.switchTo().parentFrame(); } private static async waitForDocumentCompleted(webdriver: WebDriver) { -- cgit v1.2.3 From 690c9c080a2a511a30d555a90e5005e06b750351 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 21 Mar 2021 16:54:34 +0900 Subject: change bootstrap order --- e2e/lib/Page.ts | 13 +++++++++++-- src/content/Application.ts | 8 ++++---- src/content/index.ts | 14 ++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) (limited to 'e2e') diff --git a/e2e/lib/Page.ts b/e2e/lib/Page.ts index 46d67b0..13bf70f 100644 --- a/e2e/lib/Page.ts +++ b/e2e/lib/Page.ts @@ -122,8 +122,17 @@ export default class Page { if (!topFrame) { return; } - await webdriver.wait(until.elementLocated(By.id("vimvixen-console-frame"))); - await webdriver.switchTo().frame(0); + // style tag is injected at end of add-on loading + await webdriver.wait(until.elementLocated(By.tagName("style"))); + + const iframe = await webdriver.findElements( + By.id("vimvixen-console-frame") + ); + if (iframe.length === 0) { + return; + } + + await webdriver.switchTo().frame(iframe[0]); await Page.waitForDocumentCompleted(webdriver); await webdriver.switchTo().parentFrame(); } diff --git a/src/content/Application.ts b/src/content/Application.ts index 7c8e588..b09edfa 100644 --- a/src/content/Application.ts +++ b/src/content/Application.ts @@ -36,12 +36,12 @@ export default class Application { private navigateController: NavigateController ) {} - run() { - this.routeCommonComponents(); + init(): Promise { this.routeFocusEvents(); if (window.self === window.top) { this.routeMasterComponents(); } + return this.routeCommonComponents(); } private routeMasterComponents() { @@ -76,7 +76,7 @@ export default class Application { }); } - private routeCommonComponents() { + private routeCommonComponents(): Promise { this.messageListener.onWebMessage((msg: Message) => { switch (msg.type) { case messages.FOLLOW_REQUEST_COUNT_TARGETS: @@ -117,7 +117,7 @@ export default class Application { inputDriver.onKey((key) => this.markKeyController.press(key)); inputDriver.onKey((key) => this.keymapController.press(key)); - this.settingController.initSettings(); + return this.settingController.initSettings(); } private routeFocusEvents() { diff --git a/src/content/index.ts b/src/content/index.ts index 20dbbcc..82f3a4c 100644 --- a/src/content/index.ts +++ b/src/content/index.ts @@ -7,12 +7,14 @@ import { container } from "tsyringe"; import "./di"; const initDom = () => { - try { - const app = container.resolve(Application); - app.run(); - } catch (e) { - console.error(e); - } + (async () => { + try { + const app = container.resolve(Application); + await app.init(); + } catch (e) { + console.error(e); + } + })(); const style = window.document.createElement("style"); style.textContent = consoleFrameStyle; -- cgit v1.2.3