Entendo que você está se referindo a **”slots” em testes com Playwright (PG)**. Vou explicar como testar componentes com slots, especialmente em frameworks como Vue, React ou Web Components.

## Testando Slots com Playwright

### 1. **Componentes Vue com Slots**
“`javascript
// Componente Vue com slot
// MyComponent.vue

“`

slots teste pg

### 2. **Testes Playwright para Slots**

“`typescript
// tests/my-component.spec.ts
import { test, expect } from ‘@playwright/test’;

test.describe(‘Testando componente com slots’, () => {
test(‘slot padrão’, async ({ page }) => {
await page.goto(‘/my-component’);

// Verificar slot padrão
const defaultSlot = page.locator(‘.my-component main’);
await expect(defaultSlot).toContainText(‘Conteúdo padrão’);

// Ou se o slot foi substituído
await expect(defaultSlot).toContainText(‘Meu conteúdo customizado’);
});

test(‘slot nomeado’, async ({ page }) => {
await page.goto(‘/my-component’);

// Verificar slot nomeado
const headerSlot = page.locator(‘.my-component header’);

slots teste pg

await expect(headerSlot).toContainText(‘Header customizado’);

const footerSlot = page.locator(‘.my-component footer’);
await expect(footerSlot).toContainText(‘Footer customizado’);
});

test(‘slot vazio’, async ({ page }) => {
await page.goto(‘/my-component-empty’);

// Verificar se slot padrão aparece quando vazio
const defaultSlot = page.locator(‘.my-component main’);
await expect(defaultSlot).toContainText(‘Conteúdo padrão’);
});
});
“`

### 3. **Testando Slots Dinâmicos**

“`typescript
test(‘slots dinâmicos’, async ({ page }) => {
await page.goto(‘/dynamic-slots’);

// Interagir com componente que altera slots
await page.click(‘#change-slot-button’);

// Verificar mudança no slot
const updatedSlot = page.locator(‘.dynamic-slot’);
await expect(updatedSlot).toContainText(‘Novo conteúdo’);

// Verificar atributos em elementos do slot
const slottedElement = page.locator(‘.my-component ::slotted(.custom-class)’);
await expect(slottedElement).toHaveAttribute(‘data-test’, ‘value’);
});
“`

### 4. **Seletores Específicos para Slots**

“`typescript
// Para Web Components com Shadow DOM
test(‘slots em Web Components’, async ({ page }) => {
await page.goto(‘/web-component’);

// Acessar elementos dentro do slot
const slotContent = page.locator(‘my-wc::shadow-dom >>> slot[name=”content”]’);
await expect(slotContent).toBeVisible();

// Ou usando pierce para Shadow DOM
const slottedItem = page.locator(‘my-wc >> ::slotted(li)’);
await expect(slottedItem).toHaveCount(3);
});
“`

### 5. **Melhores Práticas**

“`typescript
// 1. Use data-testid para elementos de slot
test(‘usando data-testid’, async ({ page }) => {
await page.goto(‘/component’);

const slotContainer = page.locator(‘[data-testid=”slot-container”]’);
const slottedContent = slotContainer.locator(‘[data-testid=”slotted-item”]’);

await expect(slottedContent).toBeVisible();
});

// 2. Teste fallback de slots
test(‘fallback de slot’, async ({ page }) => {
await page.goto(‘/component-without-slot’);

const fallbackContent = page.locator(‘.fallback-content’);
await expect(fallbackContent).toBeVisible();
await expect(fallbackContent).toContainText(‘Conteúdo padrão’);
});

// 3. Teste múltiplos slots
test(‘múltiplos slots’, async ({ page }) => {
await page.goto(‘/multi-slot’);

const slots = page.locator(‘.slot-item’);
await expect(slots).toHaveCount(3);

// Verificar ordem dos slots
const firstSlot = slots.first();
await expect(firstSlot).toContainText(‘Primeiro’);
});
“`

### 6. **Exemplo Completo**

“`typescript
import { test, expect } from ‘@playwright/test’;

test.describe(‘Testes abrangentes de slots’, () => {
test.beforeEach(async ({ page }) => {
await page.goto(‘/my-app’);
});

test(‘renderização completa com slots’, async ({ page }) => {
// Setup: montar componente com slots
await page.evaluate(() => {
document.body.innerHTML = `

Título Customizado

Conteúdo principal



`;
});

// Asserts
await expect(page.locator(‘my-component ::slotted([slot=”header”])’))
.toContainText(‘Título Customizado’);

await expect(page.locator(‘my-component ::slotted(.content)’))
.toBeVisible();

await expect(page.locator(‘my-component ::slotted(button)’))
.toBeEnabled();
});

test(‘interação com elementos slotted’, async ({ page }) => {
// Clicar em botão dentro do slot
await page.locator(‘my-component ::slotted(button)’).click();

// Verificar resultado da interação
await expect(page.locator(‘.result-message’))
.toContainText(‘Ação realizada’);
});
});
“`

### 7. **Dicas para Debug**

“`typescript
// Debug visual
test(‘debug slots’, async ({ page }) => {
await page.goto(‘/component’);

// 1. Tirar screenshot
await page.screenshot({ path: ‘slot-rendering.png’ });

// 2. Verificar HTML gerado
const html = await page.locator(‘my-component’).innerHTML();
console.log(‘HTML do componente:’, html);

// 3. Usar pause para inspecionar
await page.pause();

// 4. Verificar se slots estão no DOM
const isSlotRendered = await page.locator(‘slot’).count();
expect(isSlotRendered).toBeGreaterThan(0);
});
“`

### 8. **Configuração do Playwright**

“`typescript
// playwright.config.ts
import { defineConfig } from ‘@playwright/test’;

export default defineConfig({
testDir: ‘./tests’,
use: {
// Configurações para testar Shadow DOM
launchOptions: {
args: [‘–disable-web-security’] // Para testar cross-origin
}
}
});
“`

## Pontos Importantes:

1. **Shadow DOM**: Use `>>>` ou `::shadow` para acessar Shadow DOM
2. **Seletores**: `::slotted()` é útil para elementos dentro de slots
3. **Performance**: Evite seletores muito complexos
4. **Responsividade**: Teste slots em diferentes viewports

Precisa de ajuda com algum caso específico de teste de slots?

Share this post

Subscribe to our newsletter

Keep up with the latest blog posts by staying updated. No spamming: we promise.
By clicking Sign Up you’re confirming that you agree with our Terms and Conditions.