TryGhost/Ghost · error · Error

Error going to signin page (no response)

Error message

Error going to signin page (no response)

What it means

waitForLoginPageAfterUserCreated() navigates to the signin page via goto() and treats a falsy return (no response object) as a hard failure. Playwright's page.goto returns null when navigation is interrupted or a network error occurs before any response arrives — e.g. the server is unreachable, DNS fails, or a navigation was cancelled by a redirect/timeout.

Source

Thrown at e2e/helpers/pages/admin/login-page.ts:42

        await this.passwordField.fill(password);
        await this.signInButton.click();
    }

    async requestPasswordReset(email: string) {
        await this.emailAddressField.waitFor({state: 'visible'});
        await this.emailAddressField.fill(email);
        await this.forgotButton.click();
    }

    async logout() {
        await this.page.goto('/ghost/#/signout');
        await this.signInButton.waitFor({state: 'visible'});
    }

    async waitForLoginPageAfterUserCreated(): Promise<void> {
        const response = await this.goto();
        if (!response) {
            throw new Error('Error going to signin page (no response)');
        }
        if (!response.ok) {
            throw new Error(`Error going to signin page (${response.status})`);
        }
    }
}

View on GitHub (pinned to 47d8b0e2ad)

Solutions

  1. Ensure the Ghost instance is healthy and waitForReady() passed before this navigation.
  2. Use page.goto(url, {waitUntil: 'domcontentloaded'}) and wrap goto in a retry with backoff for transient network errors.
  3. Verify baseURL resolves to the gateway port; run the URL manually.

Example fix

// before
const response = await this.goto();
if (!response) throw new Error('Error going to signin page (no response)');

// after
let response = null;
for (let i = 0; i < 3 && !response; i++) {
    try { response = await this.goto(); } catch {}
    if (!response) await this.page.waitForTimeout(1000);
}
if (!response) throw new Error('Error going to signin page (no response after retries)');
Defensive patterns

Strategy: retry

Validate before calling

async function reachable(page: Page, url: string): Promise<boolean> {
    try {
        const r = await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 5000});
        return !!r;
    } catch { return false; }
}

Try / catch

let response = null;
for (let i = 0; i < 3 && !response; i++) {
    try { response = await this.goto(); } catch { /* keep retrying */ }
    if (!response) await this.page.waitForTimeout(1000);
}
if (!response) throw new Error('Error going to signin page (no response)');

Prevention

When it happens

Trigger: Ghost container not yet reachable when the test navigates. baseURL DNS/routing wrong so no response is received. Navigation cancelled by a client-side redirect before response. Network condition caused request to never complete with a response.

Common situations: Test runs before waitForReady() completed; baseURL fixture misconfigured; Ghost crashed between setup and this step; flaky local DNS.

Related errors


AI-assisted analysis of TryGhost/Ghost@47d8b0e2ad (2026-08-13). Data as JSON: /api/errors/8ad70ec7059d4b6b. Report an issue: GitHub.