Playwright: вопросы на собеседовании

Microsoft Playwright — библиотека node.js с открытым кодом для автоматизации взаимодействия с браузером. Этот инструмент недавно обогнал Cypress и по загрузкам, и по звездам

Данный список вопросов для собеседования кратко охватывает много тем на собесе, от базовых концепций до сложных кейсов. 

1) Чем Playwright отличается от других инструментов браузерной автоматизации, таких как Selenium?

  • Playwright поддерживает автоматическое ожидание, в отличие от Selenium. 
  • Скорость выполнения Playwright выше, чем у Selenium. 
  • В Playwright реализована нативная поддержка автоматизации. 
  • Кроме того, в Playwright встроен механизм скриншотов и видео с экрана во время выполнения тестов. 

2) Какие браузеры поддерживаются в Playwright?

Microsoft Playwright поддерживает браузеры Chromium, Firefox и Safari. 

3) Как установить Playwright? 

Для установки требуется установка нода Playwright. При помощи менеджера пакетов :

npm init playwright@latest

4) Ключевые особенности Playwright? 

Перечислены ниже: 

  • Поддерживает все нужные браузеры. 
  • Может выполнять скрипты как в headless-режиме, так и в режиме UI. 
  • Playwright поддерживает функцию автоматического ожидания (auto-wait), которая ожидает готовности элементов перед тем как с ними взаимодействовать Это уменьшает необходимость явно прописывать время ожиданий в скриптах. 
  • В Playwright встроены возможности для записи скриншотов и видео, которые помогают в отладке. 
  • Настройка очень простая, что экономит время и усилия. 
  • Playwright позволяет перехватывать и изменять сетевые запросы, что позволяет создавать расширенные сценарии тестирования с имитацией различных условий.

5) Какие типы тестирования поддерживает Playwright?

Playwright поддерживает функциональное тестирование, сквозное тестирование и тестирование API

6) Опишите предназначение файла конфигурации в Playwright Framework? 

В Playwright файл конфигурации управляет и настраивает поведение скриптов. Файл конфигурации содержит несколько параметров и опций для настройки среды выполнения, длительности таймаутов, браузеров, настройки скриншотов и т. д. 

7) Какие общие стратегии локаторов существуют в Playwright?

Playwright поддерживает следующие локаторы: 

  • По Id, идентификатору
  • Text, тексту
  • By Text Content (По содержанию текста)
page.locator({ text: 'exact text' })

4. По Xpath 

5. CSS-селектор 

6. По роли

page.getByRole('button', { name: submit })

7. По метке (label)

8. По плейсхолдеру

9. По AltText

page.getByAltText('AQH')

10. По названию (тайтлу)

//HTML
<span title='AutomationQAHub'>AQH Learning</span>

//Playwright Locator
await expect(page.getByTitle('AutomationQAHub')).toHaveText('AQH Learning');

8) Объясните понятие «селектор»

Селекторами называются строки или параметры, используемые для создания локаторов. 

Playwright поддерживает селекторы CSS, селекторы XPath и селекторы текста:

page.locator(selector[, options]) 

//selector
 page.locator('css=button'). //CSS Selector
 page.locator('//div[@id="confirmation"]') //Xpath Selector

9) Какие языки поддерживает Playwright?

Playwright поддерживает JavaScript, TypeScript, Java, C# и Python. 

10) Как записывать и воспроизводить скрипты в Playwright? 

Playwright поставляется с инструментом записи тестов под названием ‘Playwright Codegen’. С его помощью можно записывать скрипты с базовыми ассертами и использовать их в наших тестовых скриптах. 

Команда запуска Codegen:

npx playwright codegen URL

11) В чем разница между fill() и type()? 

Метод Fill() очищает существующее значение, а затем вводит строку за один раз. В отличие от этого, метод type() просто вводит строку по одному символу. 

12) Какой таймаут по умолчанию для страницы в Playwright?

По умолчанию таймаут для каждого теста Playwright составляет 30 секунд. Если действие не будет завершено в течение 30 секунд, Playwright выдаст ошибку таймаута. Однако этот таймаут можно изменить, указав свое значение таймаута, при вызове определенных методов.

await page.click('button#submit', { timeout: 5000 }); 

13) Какой таймаут по умолчанию для ассертов в Playwright?

Для ассертов (утверждений) Playwright таймаут по умолчанию равен 5 секундам. Мы можем не учитывать этот таймаут, установив глобальный таймаут в главном файле конфигурации Playwright.

 expect : {
    timeout: 30 * 1000,
  }

Кроме того, есть возможность настроить таймаут для каждого теста отдельно.

await expect(navigationMenu.CollapseMenu).toBeVisible({timeout:5000})

14) Как верифицировать URL-адрес в Playwright? 

Проверить точность совпадения с помощью ассерта expect с функцией toHaveURL():

await expect(page).toHaveURL('https://www.automationqahub.com/playwright'); 

2. Проверить частичное совпадение:

await expect(page).toHaveURL(/playwright/);

3. С регулярными выражениями:

await expect(page).toHaveURL(new RegExp('/playwright$'));

15) Как имитировать клики в Playwright? 

Простой щелчок (кликнуть мышкой):

page.locator('locator').click()

2. Двойной щелчок:

page.locator('locator').dblclick()

3. Правой кнопкой мыши:

page.locator('locator').click(button='right')

16) Что такое мягкие утверждения? 

В отличие от жестких утверждений, мягкие утверждения (soft assertions) не прерывают выполнение тестового сценария немедленно при сбое. Выполнение теста продолжается даже в случае если утверждение оказалось неверным. В конце выполнения тест будет помечен как неудачный (красный).

  await expect.soft(firstname).toHaveValue('AQH');

В конце, чтобы собрать все упавшие места, используется test. info().errors для проверки отсутствия/наличия ошибок.

  expect(test.info().errors).toHaveLength(0)

17) В чем разница между innerText() и TextContent() в Playwright?

Метод innerText() может получить только видимый текст любого веб-элемента, а метод TextContent() может получить и скрытый текст. 

18) В чем разница между locator() и locateAll()? 

В отличие от Selenium, в Playwright есть единственный метод locator(‘locator’), который используется для поиска и возврата первого совпадающего элемента в DOM.

page.locator('locator')

Находим все совпадающие элементы в DOM и возвращаем список элементов.

page.locator('locator').all()

19) Какие команды используются для выбора выпадающего списка с помощью Playwright?

Доступны три варианта:

await page.selectOption('select#dropdownId', { label: 'OptionText' }); //SelectByVisisbleText

await page.selectOption('select#dropdownId', { index: 1 }); //SelectByIndex

await page.selectOption('select#dropdownId', 'OptionValue'); //SelectByValue

20) Как определить местоположение элемента с помощью составных селекторов?

Можем использовать условие OR, чтобы проверить веб-элемент, который соответствует либо локатору1, либо локатору2.

await expect.soft(page.locator('locator1').or(page.locator('locator2'))).toContainText(team);

Другой подход — использование оператора запятой. ,

await expect.soft(page.locator('button:has-text("Log in"), button:has-text("Sign in")')).toBeVisible();

21) Каково назначение метода waitForFunction в Playwright и как он используется? 

Функция waitForFunction() используется для приостановки выполнения до тех пор, пока заданная функция не вернет истинное значение. Например:

await page.waitForFunction(() => window.innerWidth < 1000);

22) Объясните WaitFor() в Playwright. 

WaitFor() — это функция в Playwright, которая используется для ожидания определенных условий, таких как visible, stable, enable и attached

23) Как выполнить прокрутку в Playwright?

 await page.evaluate(() => { window.scrollTo(0, document.body.scrollHeight); });
await page.locator('locator').scroll_into_view_if_needed() 

24) Как повторно выполнить неудачные тест-кейсы в Playwright?

Изменить параметры конфигурации в файле playwright.config.js.

const config = {
  // Give failing tests 2 retry attempts
  retries: 2,
};

Альтернативный вариант — из командной строки:

npx playwright test --retries=2

25) Назовите самые частые исключения в Playwright

Например:

  • Ошибка таймаута: Выбрасывается, когда определенная операция завершается по истечению времени. Например, ожидание появления элемента на странице с помощью waitForSelector выбросит TimeoutError, если элемент не появится в течение указанного таймаута.
  • ElementHandleError: Когда возникает проблема при взаимодействии с хэндлом элемента в DOM. Это может произойти, если элемент не виден, не кликабелен или если операция не может быть выполнена.
  • NetworkError: Сетевой сбой возникает при ошибках, связанных с сетью, таких как неудачные сетевые запросы или невозможность подключения к ресурсу. 
  • ContextClosedError: Эта ошибка возникает при попытке работать с закрытым контекстом браузера.
  • StrictModeViolation Error: Эта ошибка возникает, когда наш локатор находит более одного элемента.

26) Как сохранить скриншот в нужное место?

await page.screenshot({path:'screenshot.png'})

Будет сделан скриншот и сохранен, на уровне проекта.

27) Как сделать частичный скриншот с помощью Playwright?

 Чтобы сделать частичный скриншот или скриншот, относящийся к конкретному веб-элементу, используем метод locator.screenshot():

await page.locator('#textbox').screenshot({path:'PartialScreenshot.png'})

28) Что такое контекст браузера? 

«Контекст браузера» означает изолированную среду (окружение) внутри экземпляра браузера. Контекст браузера помогает создать несколько независимых экземпляров браузера, каждый из которых имеет свой собственный набор страниц, куки и хранилище. Это полезно для управления различными состояниями или сценариями, параллельного выполнения и сетевой изоляции.

 // Launch a browser instance
  const browser = await chromium.launch();

  // Create two browser contexts
  const context1 = await browser.newContext();
  const context2 = await browser.newContext();

  // Create pages in each context
  const page1 = await context1.newPage();
  const page2 = await context2.newPage();

  // Navigate to different URLs in each page
  await page1.goto('https://example.com');
  await page2.goto('https://example.org');

})();

Выше мы создали 2 контекста браузера и разные страницы в каждом из них. Обе страницы открывают разные URL-адреса. Мы можем выполнять разные наборы действий в этих контекстах.

29) Как автоматизировать всплывающие уведомления?

 В Playwright всплывающие уведомления можно автоматизировать с помощью обработчика события page.on(‘dialog’). Он позволяет перехватывать и обрабатывать различные типы диалогов, включая диалоги оповещения, подтверждения и подсказки.

page.on(dialog,dialog =>dialog.accept()) //To Accept the alert
page.on(dialog,dialog =>dialog.dismiss()) //To Dismiss the alert

30) Как запускать тесты параллельно? 

По умолчанию Playwright выполняет тестовые файлы (скрипты) в параллельном режиме, но при этом обрабатывает тест-кейсы внутри этих файлов последовательно. 

Например, если у вас есть 3 тестовых скрипта, каждый из которых содержит 2 тест-кейса; тогда все 3 тестовых скрипта будут выполняться в параллельном режиме, а тесты-кейсы внутри каждого файла будут выполняться последовательно. 

31) Как выполнить тесты из одного тестового файла в параллельном режиме?

test.describe.configure({mode:'parallel'})

Этот код включает параллельное выполнение всех тестов в одном файле.

32) А в последовательном?

test.describe.configure({mode:'serial'})

Serial — настройка по умолчанию в каждом файле. Мы можем переопределить ее с помощью режима ‘parallel’, чтобы выполнять тест-кейсы параллельно.

33) Как загрузить (скачать) файл с помощью Playwright.

Для поддержки событий загрузки в плейсхолдере предусмотрен обработчик событий page.waitForEvent(‘download’).

 await page.locator('locator').click()
 const[download] =await Promise.all([
    await page.waitForEvent('download')
  ])
  console.log(`Download started: ${download.suggestedFilename()}`);
  const path =download.suggestedFilename();
  await download.saveAs(path)

При нажатии на ссылку/кнопку запускается событие загрузки, которое обрабатывается с помощью обработчика события page.waitForEvent(‘download’). Как только событие загрузки получено, мы сохраняем файл по указанному пути и записываем информацию в журнал.

34) Как прикрепить файл в HTML-репорте? 

В TestInfo содержится информация о текущем запущенном тесте. Она доступна для тестовых функций, хуков и фикстур масштаба теста. TestInfo предоставляет утилиты для управления выполнением теста: прикрепление файлов, обновление таймаута теста, определение того какой тест запущен в данный момент и был ли он повторно запущен, и т.д. Чтобы прикрепить загруженный файл к репорту, используйте приведенный ниже код.

await testInfo.attach('downloaded file', { path: path });

35) Как сгенерировать отчет Allure/HTML и поделиться им в Playwright? 

В этой статье (англ.) я подробно объяснил, как сгенерировать и поделиться репортом HTML/Allure, со сжатием. 

36) Как обрабатывать оповещения в Playwright?

 page.on('dialog', async dialog => {
            // Verify type of dialog
  expect(dialog.type()).toContain('alert')
  });  

Приведенный выше код проверяет наличие оповещения в DOM. Чтобы проверить текст окна оповещения — следующий код:

  // verify message of alert
  expect(dialog.message()).toContain('Please select atleast one pillar phase.');

Принять предупреждение:

 //click on alert ok button
  await dialog.accept();

37) Что лучше, Playwright или Cypress? 

У каждого инструмента есть плюсы и минусы. Выбор инструмента зависит от требований и ограничений проекта. Однако в целом по скорости Playwright видимо лучший, или приближается к этому.

38) Может ли Playwright автоматизировать приложения для Windows?

Да, но только созданные в Electron и написанные на JS. Тогда Playwright может автоматизировать такие настольные приложения на различных платформах, включая Windows, MacOS и Linux, с помощью пакета nut js.

39) Как загрузить файл в Playwright? 

Для загрузки файла (на сервер, от пользователя) в Playwright используется команда setInputFile(). Если мы хотим загрузить несколько файлов, мы можем использовать метод setInputFiles().

await page.locator('#Button').setInputFiles('myfile.pdf');
await page.locator('#Button').setInputFiles(['file1.pdf', 'file2.pdf']);

40) Как закрыть страницу/вкладку или браузер в Playwright?

//To Close Page or Tab
page.close() - Used to close individual page

// To close Browser
browser.close() 

AutomationQaHub


Тем временем скорость загрузки YouTube на стационарных ПК в РФ может снизиться на 40-70%

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

1 КОММЕНТАРИЙ

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Владислав
Владислав
6 месяцев назад

Не совсем актуальна статья, так как метод type уже deprecated и вместо него рекомендовано использовать pressSequentially

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас