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
- Ensure the Ghost instance is healthy and waitForReady() passed before this navigation.
- Use page.goto(url, {waitUntil: 'domcontentloaded'}) and wrap goto in a retry with backoff for transient network errors.
- 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
- Ensure Ghost is healthy (waitForReady) before navigating to the admin.
- Use waitUntil: 'domcontentloaded' and retry transient network failures.
- Verify baseURL resolves to the gateway port.
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
- Error going to signin page (${response.status})
- Portal popup did not open
- Egress monitor container has no network IP
- [e2e fixture] resetEnvironment() must be called before resol
- Failed to ${callType}: ${response.statusText}
AI-assisted analysis of TryGhost/Ghost@47d8b0e2ad (2026-08-13).
Data as JSON: /api/errors/8ad70ec7059d4b6b.
Report an issue: GitHub.