#javascript #typescript #automated-tests #playwright #playwright-test
#язык JavaScript #машинописный текст #автоматизированные тесты #драматург #драматург-тест
Вопрос:
Я очень новичок в драматургии. Из-за моих наборов тестов мне нужно войти в свое приложение перед запуском каждого теста. Внутри одного файла спецификации, который очень прост, я могу просто позвонить test.beforeEach
. Моя проблема в том, что мне нужно перед входом в систему перед каждым тестированием каждого файла спецификации.
test.describe('Test', () =gt; { //I need to make the code inside this beforeEach a exported //function to call inside the before each of every spec file I have test.beforeEach(async ({ page }) =gt; { await page.goto('/login'); await page.click('text=Log in with Google account'); await page.fill('id=identifierId', LoginAutomationCredentials.USER); await page.click('button[jsname="LgbsSe"]'); await page.fill('input[type="password"]', LoginAutomationCredentials.PASSWORD); await page.click('button[jsname="LgbsSe"]'); const otp = authenticator.generateToken(LoginAutomationCredentials.TOKEN); await page.fill('id=totpPin', otp); await page.click('button[jsname="LgbsSe"]'); }); it('Some description', async ({ page }) =gt; { await page.goto('/foo'); const dateFilter = await page.inputValue('input[placeholder="2011/03/02"]'); expect(dateFilter).toBe('2021/12/07'); }); });
Я попытался просто взять этот код и сделать его функцией внутри отдельного файла .ts, а затем импортировать его, но я решил, что для этого необходим контекст. Это, вероятно, то, что знает и регулярно использует каждый тестировщик, использующий драматурга, однако я ничего не нашел по этому вопросу.
Как я могу избежать копирования всего кода beforeEach
и вставки его во все мои файлы спецификаций? Как я могу сделать это функцией и вызывать ее всякий раз, когда захочу?
Комментарии:
1. Почему бы вам просто не использовать глобальную настройку и повторно использовать аутентификацию? Вы также можете попробовать с помощью приспособлений, создать приспособление для входа и передать его вместо приспособления для страницы.
Ответ №1:
Используйте приспособления.
fixture.js:
const base = require('@playwright/test') const newTest = base.test.extend({ login: async({page}, use) =gt; { await login(); await use(page); //runs test here //logic after test } }) exports.newTest = newTest exports.expect = newTest.expect
Затем в ваших тестах:
const {newTest} = require('fixture.js') newTest('mytest', async ({login}) =gt; { //test logic login.goto(''); // using login here since I pass it as page in the fixture. })