Uprawnienia, których użytkownik odmawia

Testuj geolokalizację, schowek, kamerę i powiadomienia, gdy użytkownik odmawia. Fixture, który wszystko przyznaje, chowa tę ścieżkę.

Ten wpis jest częścią serii Podstawy Playwright. Jeśli pominąłeś poprzedni, przeczytaj Część 12 — Które przeglądarki naprawdę odpalać.


Wprowadzenie — suite zawsze mówi tak

Bazowy fixture przyznaje geolokalizację, schowek i powiadomienia, bo jeden test potrzebował mapy. Każdy kolejny to dziedziczy. Użytkownika, który klika „Zablokuj”, już nie masz.

Uprawnienia są częścią produktu. Odmowa jest częstą gałęzią.

Domyślnie odmawiaj

Zostaw kontekst w spokoju. Przyznaj uprawnienie tylko w teście, który bada ścieżkę zgody.

test('explains a denied location', async ({ page }) => {
  await page.goto('/stores');
  await expect(page.getByRole('status')).toHaveText('Location is off. Search by city.');
});

test('centres the map when location is allowed', async ({ context, page }) => {
  await context.grantPermissions(['geolocation']);
  await context.setGeolocation({ latitude: 52.23, longitude: 21.01 });
  await page.goto('/stores');
  await expect(page.getByRole('heading', { name: 'Stores near you' })).toBeVisible();
});

grantPermissions jest na kontekst. Grant w beforeEach to sposób, w jaki znika test odmowy.

Ten sam podział dotyczy camera, microphone, clipboard-read i notifications. Jeden test zgody i jeden odmowy na każdą funkcję, która zmienia ekran, gdy odpowiedź brzmi nie.

Co musi zrobić ścieżka odmowy

  • powiedzieć w stronie, nie tylko w systemowym monicie, że funkcji nie ma
  • dać inną drogę: wpisać miasto, wgrać plik, skopiować kod ręcznie
  • nie rzucić nieobsłużonego błędu, który czyści widok

Tekstu systemowego monitu nie sprawdzisz pewnie między silnikami. Sprawdzaj swój UI, gdy uprawnienie jest już odmówione. Playwright startuje z odmową, dopóki jej nie przyznasz. Taki setup jest właściwy.

WebKit to nie Chromium

Safari jest ostrzejsze w tym, które uprawnienia da się ustawić z automatyzacji, szczególnie schowek i kamerę. Jeśli funkcja ma znaczenie na iPhonie, test odmowy należy do plastra @webkit z części 12. Jeśli grantPermissions nie obsługuje tej nazwy, zostaw test odmowy, a zgodę sprawdź ręcznie na urządzeniu. Nie pomijaj obu.

Nie „naprawiaj” odmowy pytaniem w pętli

Test, który przeładowuje stronę, aż uprawnienie się przyklei, dokumentuje ciemny wzorzec. Produkt dostaje jeden monit. Potem zachowaniem jest wyjaśnienie na stronie.

Podsumowanie

Przyznaj uprawnienie w teście, który bada zgodę. Resztę zostaw odmówioną. Sprawdzaj ekran, który zbudowałeś dla użytkownika, który powiedział nie.

Zadanie na ten tydzień: Znajdź jedną funkcję, która woła geolokalizację, schowek albo kamerę. Najpierw dodaj test odmowy. Globalny grant przenieś do jedynego testu zgody.


Następny wpis w serii: Część 14 — Pliki, które użytkownik naprawdę wysyła.