![]()
Testy automatyczne z Test Cafe to pierwszy wpis na temat przedmiotowego narzędzia na naszym serwisie. Chcemy abyście jako użytkownicy i czytelni mogli poznawać różne narzędzia do testowania.
Wprowadzenie
-
TestCafe to open-source’owe narzędzie do automatyzacji testów UI aplikacji webowych. Zostało stworzone przez firmę DevExpress, a jego celem było zapewnienie prostoty, stabilności i nowoczesnego podejścia do testowania interfejsów użytkownika. TestCafe działa w środowisku Node.js i pozwala pisać testy w językach JavaScript lub TypeScript, co czyni go świetnym wyborem dla zespołów frontendowych.
W odróżnieniu od tradycyjnych rozwiązań, takich jak Selenium, TestCafe nie wymaga WebDrivera ani dodatkowych zależności przeglądarkowych. Wykorzystuje własny mechanizm proxy i działa bezpośrednio z przeglądarkami, co upraszcza konfigurację i zwiększa stabilność testów.
Co wyróżnia TestCafe?
Oto kilka cech, które sprawiają, że TestCafe jest tak atrakcyjny dla programistów i testerów:
-
Brak WebDrivera
TestCafe działa z przeglądarkami natywnie, bez potrzeby konfiguracji sterowników czy środowiska uruchomieniowego. To ogromne ułatwienie, zwłaszcza przy uruchamianiu testów na różnych maszynach i systemach CI. -
Wieloplatformowość
Działa na wszystkich głównych systemach operacyjnych – Windows, macOS i Linux – co czyni go elastycznym wyborem dla zespołów rozproszonych. -
Testy równoległe
Dzięki wbudowanej obsłudze uruchamiania testów w wielu przeglądarkach jednocześnie, TestCafe pozwala znacząco skrócić czas wykonywania testów. -
Łatwa integracja z CI/CD
TestCafe świetnie współpracuje z systemami takimi jak GitHub Actions, GitLab CI, Jenkins, CircleCI i innymi. Generuje czytelne raporty i umożliwia eksport wyników w różnych formatach (np. JSON, JUnit). -
Prosta składnia i czytelność kodu
Testy pisane w TestCafe są zwięzłe, deklaratywne i łatwe do zrozumienia nawet dla osób spoza zespołu developerskiego.
Dla kogo jest TestCafe?
TestCafe to świetne narzędzie zarówno dla początkujących testerów, jak i dla doświadczonych developerów, którzy chcą szybko zautomatyzować testy UI. Jego niski próg wejścia sprawia, że można go wdrożyć nawet w niewielkich projektach, a jednocześnie skaluje się dobrze do większych środowisk produkcyjnych.
Sprawdzi się szczególnie wtedy, gdy:
-
potrzebujesz niezawodnych testów E2E bez rozbudowanej infrastruktury,
-
zależy Ci na szybkim uruchamianiu testów lokalnie i w CI,
-
tworzysz aplikację SPA (np. w React, Angular, Vue),
-
chcesz pisać testy w nowoczesnym JavaScript/TypeScript.
-
Instalacja
Zanim zaczniemy pisać nasze pierwsze testy, musimy przygotować środowisko. Na szczęście TestCafe nie wymaga skomplikowanej konfiguracji – wystarczy Node.js i kilka poleceń w terminalu. C
Krok 1: Upewnij się, że masz Node.js
TestCafe działa w środowisku Node.js, więc jeśli jeszcze go nie masz, zainstaluj najnowszą wersję ze strony: https://nodejs.org
Krok 2: Utwórz nowy projekt (opcjonalnie)
Możesz zainstalować TestCafe globalnie lub jako zależność w konkretnym projekcie. Zalecane podejście to utworzenie dedykowanego projektu:
Krok 3: Instalacja TestCafe
Zainstaluj TestCafe lokalnie w projekcie:
npm install --save-dev testcafe
lub
npm install -g testcafe

Krok 4: Stwórz pierwszy plik testowy
Utwórz plik firstTest.test.js:
import { Selector } from 'testcafe';
fixture('Test strony głównej') // poprawiono składnię fixture
.page('https://example-page.pl'); // poprawiono składnię page
test('Strona główna wyświetla nagłówek i obrazek', async t => {
const naglowek = Selector('h1'); // lub inny selektor np. '#main-title'
const obrazek = Selector('img[alt="Logo"]'); // dopasuj do rzeczywistego ALT lub ID
await t
.expect(naglowek.exists).ok('Nagłówek nie istnieje na stronie')
.expect(naglowek.innerText).contains('Witaj', 'Nagłówek nie zawiera oczekiwanego tekstu')
.expect(obrazek.visible).ok('Obrazek nie jest widoczny');
});
Następnie uruchom test z linii komend:
npx testcafe chrome firstTest.test.js

Inne przykłady testów
Jeżeli chciałbyś zalogować się do przykładowej strony, to najprostszy sposób to:
import { Selector } from 'testcafe';
fixture('Login Page')
.page('https://example-page.pl/login');
test('Użytkownik może się zalogować', async t => {
await t
.typeText('#username', 'test_user')
.typeText('#password', 'tajnehaslo')
.click('#login-button')
.expect(Selector('#welcome-message').innerText).contains('Hello');
});
Praca z checkboxami / radio / select (formularz)
import { Selector } from 'testcafe’;
fixture('Formularz - pola wyboru')
.page('https://example-page.pl/form');
test('Użytkownik wypełnia formularz i wysyła', async t => {
const imie = Selector('#name');
const newsletter = Selector('#newsletter');
const plecMezczyzna = Selector('input[name="gender"][value="male"]');
const kraj = Selector('#country');
const submit = Selector('button[type="submit"]');
const successMsg = Selector('.success-message');
await t
.typeText(imie, 'Rafał')
.click(newsletter) // checkbox
.click(plecMezczyzna) // radio
.click(kraj)
.click(kraj.find('option').withText('Polska')) // select
.click(submit)
.expect(successMsg.innerText)
.contains('Dziękujemy', 'Nie pojawił się komunikat sukcesu');
});
Upload pliku (np. avatar, faktura, dokument)
import path from 'path';
import { Selector } from 'testcafe';
fixture('Upload pliku')
.page('https://example-page.pl/profile');
test('Użytkownik może wgrać plik', async t => {
const fileInput = Selector('input[type="file"]#avatar');
const uploadBtn = Selector('#upload-button');
const avatarPreview = Selector('.avatar-preview img');
const filePath = path.join(__dirname, 'test-data', 'avatar.png');
await t
.setFilesToUpload(fileInput, [filePath])
.click(uploadBtn)
.expect(avatarPreview.exists)
.ok('Podgląd avatara nie pojawił się po uploadzie');
});

Test listy / tabeli + filtr + asercja elementów
import { Selector } from 'testcafe';
fixture('Lista produktów')
.page('https://example-page.pl/products');
test('Filtrowanie produktów po nazwie', async t => {
const search = Selector('#search-input');
const products = Selector('.product-item');
const firstProductTitle = products.nth(0).find('.title');
await t
.typeText(search, 'Laptop', { replace: true })
.pressKey('enter')
.expect(products.count)
.gt(0, 'Brak wyników po filtrowaniu')
.expect(firstProductTitle.innerText)
.contains('Laptop', 'Pierwszy wynik nie pasuje do filtra');
});
Ostatnie zmiany
Test Cafe nadal się rozwija – mimo, że na ich stronie od dawna zaniedbane są tematy zmian. Warto spojrzeć na inne źródła. Zerknij np. na npmjs.com.
-
TestCafe rozwija ostatnio głównie obszary stabilności i kompatybilności z nowoczesnym ekosystemem (Chrome/Node/ESM).
-
Wprowadzono
t.getCurrentCDPSession()dla użytkowników Native Automation (CDP), co ułatwia debugging i analizę problemów po stronie przeglądarki. -
Dodano wsparcie dla nowego headless Chromium (lepsza zgodność z realnym trybem przeglądarki).
-
W konfiguracji pojawiła się opcja
esm, a także uporządkowano typy (Metadatajako interface). -
W wydaniach 3.7.x skupiono się na naprawach typowych problemów E2E: proxy mode, Angular, Docker, drag&drop, CodeMirror.
Podsumowanie
Podsumowując, TestCafe to lekkie i bardzo przystępne narzędzie do automatyzacji testów aplikacji webowych. Umożliwia szybkie tworzenie testów end-to-end bez konieczności konfigurowania WebDrivera, działa płynnie na różnych systemach operacyjnych i obsługuje wiele przeglądarek. Dzięki prostej składni, możliwości uruchamiania testów równolegle oraz bogatemu ekosystemowi reporterów i integracji CI/CD, TestCafe doskonale sprawdza się zarówno w małych projektach, jak i w środowiskach enterprise. To solidny wybór dla zespołów szukających niezawodnej automatyzacji testów UI z minimalnym progiem wejścia. Testy automatyczne z Test Cafe to kolejny wpis który ma Was zainteresować do poznania kolejnych narzędzi. Zapraszamy na inne wpisy związane z automatyzacją testów.

