typescript - Att anropa en GET-API i Playwright misslyckas (ECONNREFUSED)
Ny till Playwright, försöker ett enkelt "Hello, World" för att testa ett REST API. Exempeltester fungerar helt fint direkt. Jag lade till ett API-test som anropar en GET-endpoint men detta resulterar alltid i ett fel.
Fel: apiRequestContext.get: connect ECONNREFUSED 2606:4700:20::681a:93b:443
Min example.spec.ts ser ut så här.
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();
// Expects page to have a heading with the name of Installation.
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});
test('API Get Request', async ({request}) => {
const res = await request.get('https://api.myip.com');
expect(res.status()).toBe(200);
const body = await res.json();
});
Några idéer varför detta inte fungerar?
Svar #1
ECONNREFUSED är inte ett fel specifikt för Playwright. Av någon anledning vägrade api.myip.com din förfrågan. Jag testade din kod på mitt system och fick ett svar utan problem, så slutpunkten är nåbar med Playwright.
Jag skulle rekommendera att du kontrollerar din playwright.config.ts och säkerställer att spårning är aktiverad, kör testet igen och använd sedan npx playwright show-report för att ladda HTML-rapporten och öppna spårningsfilen. Spårningen kommer att ge dig alla nätverksanslutningsdetaljer, som om du hade fångat förfrågan med utvecklarverktygen. Se https://playwright.dev/docs/trace-viewer-intro för mer information.
Svar #2
Jag försökte ringa ett annat slutpunkt i domännätverket och det fungerar. Även om jag inte har kunnat verifiera detta, är min starka misstanke att Windows Defender-brandväggen blockerar Node.js JavaScript Runtime i offentliga nätverk. Jag kan inte testa om det att inaktivera denna brandväggsregel löser problemet eftersom detta styrs av en gruppolicy. Anledningen till att page.goto fungerar är att det körs i webbläsarkontexten.
Jag ser ingen regel för Node.js JavaScript Runtime i utgående regler, vilket förvirrar mig. Av denna anledning är jag inte helt säker på om min misstanke är korrekt. I vilket fall, om du stöter på detta problem, är det värt att kontrollera inställningarna för Windows Defender-brandväggen.
REDIGERA Den andra möjliga orsaken som kommer i åtanke är en proxyserver. Återigen, jag kan inte testa detta eftersom det styrs av en gruppolicy.