Wirtualny authenticator i passkeye (WebAuthn)
Logowanie oparte na passkeyach było do tej pory drogą przez mękę – wymagało fizycznego klucza (np. YubiKey) albo wsparcia ze strony systemu operacyjnego. Wersja 1.61 wprowadza wirtualny authenticator dostępny przez browserContext.credentials. Pozwala on zarejestrować passkey i odpowiadać na wywołania navigator.credentials.create() oraz navigator.credentials.get() wprost na stronie – bez zewnętrznego sprzętu i na wszystkich przeglądarkach.
Funkcja działa na dwa sposoby: możemy wgrać do kontekstu klucz, który backend przygotował dla testowego użytkownika, wywołujemy credentials.create() z jego danymi, a potem credential.install(). Od tej chwili strona, która przy logowaniu sięga po navigator.credentials.get(), dostanie odpowiedź z naszym podstawowym passkeyem. Drugą opcją jest pozwolenie aplikacji zarejestrować passkey raz w teście przygotowawczym, odczytanie go przez credentials.get() i przekazanie gotowego tokenu do kolejnych testów.
Bezpośredni dostęp do pamięci (Web Storage)
Do dyspozycji dostajemy nowe API WebStorage, dostępne przez page.localStorage oraz page.sessionStorage, które pozwala na bezpośredni odczyt i zapis pamięci strony dla bieżącego originu.
Zamiast obchodzić temat i pisać boilerplate za pomocą page.evaluate(), możemy po prostu wywołać setItem(), getItem() czy items(), żeby pobrać całą zawartość. To drobiazg, który wyraźnie ułatwia przygotowanie stanu aplikacji przed testem oraz weryfikację danych przechowywanych w przeglądarce.
Nowości w obszarze sieci
Pojawiły się dwie zmiany, które warto odnotować:
- Wsparcie dla WebSocketów w śladach. To spora zmiana – nagrania HAR i Trace Viewer obsługują teraz żądania WebSocket. Wcześniej ten ruch wymykał się automatycznemu zapisowi, a teraz obraz komunikacji aplikacji z serwerem staje się kompletny.
- Spójność w API żądań. W API żądań (APIRequest) do obiektu odpowiedzi dodano metody
apiResponse.securityDetails()orazapiResponse.serverAddr(). To lustrzane odbicie znanych już z odpowiedzi przeglądarkowychresponse.securityDetails()iresponse.serverAddr(). Do szczegółów certyfikatu i adresu serwera sięgamy teraz identycznie, niezależnie od tego, jak wysłaliśmy żądanie.
Przeglądarka i screencast
W browserType.connectOverCDP() doszła opcja artifactsDir. Wskazujemy w niej, gdzie mają trafić artefakty (ślady, pobrane pliki) przy podpinaniu się do już uruchomionej przeglądarki. Funkcja screencast.showActions() zyskała opcję cursor, która steruje sposobem rysowania kursora przy akcjach wskaźnika. I wreszcie callback onFrame w screencast.start() zwraca teraz znacznik czasu (timestamp) informujący, kiedy dokładnie przeglądarka wyrenderowała daną klatkę.
Usprawnienia w test runnerze
W samym runnerze uzbierało się sporo ułatwień diagnostycznych i konfiguracyjnych:
- Opcja
testOptions.videoobsługuje teraz ten sam zestaw trybów co tracing:on-all-retries,retain-on-first-failureorazretain-on-failure-and-retries. Dzięki temu nagrywanie wideo dopasujemy dokładnie do tych przebiegów, które faktycznie nas interesują. - Pojawiło się wsparcie dla
expect.soft.poll(…), które sprawnie łączy miękkie asercje z automatycznym odpytywaniem (pollingiem). testInfo.errorsrozbija teraz każdy podbłąd zAggregateErrorna osobny, czytelny wpis. Dodano też wygodny skrót-Gdlaflagi --grep-invert.- Nowe fullConfig.argv daje migawkę process.argv z procesu runnera (przydatne do odczytywania własnych argumentów przekazanych po separatorze
--). Z koleifullConfig.failOnFlakyTestsodbija ustawienie z pliku konfiguracyjnego, ułatwiając reporterom wyjaśnienie, dlaczego uruchomienie zawierające niestabilne testy zakończyło się porażką.
Aktualizacja środowiska i silników
Playwright v1.61 dodaje oficjalne wsparcie dla Ubuntu 26.04. Tradycyjnie podbito też wersje silników przeglądarek, na których uruchamiane są testy:
- Chromium 149.0.7827.55 (oraz stabilne kanały Google Chrome 149 i Microsoft Edge 149),
- Mozilla Firefox 151.0,
- WebKit 26.5.
Redakcja testerzy.pl