如标题所示。这是我来自的地方:
imports { ... } ...
let myVariable: string;
test.describe.configure({mode: serial})
test.beforeEach(async ({page, variousPOJs})) => {
visit main page, etc.
}
test(`scenario for case 1`, async ({
}) => {
myVariable = "123"
})
test(`scenario for case 2`, async ({
}) => {
console.log(myVariable) ==> outputs "123"
})
imports { ... } ...
let myVariable: string;
test.describe.configure({mode: serial})
test.beforeEach(async ({page, variousPOJs})) => {
visit main page, etc.
}
const cases = [{nr: 1, title: "a", objName: "normal"}, {nr: 2, title: "b", objName: "updated"}];
for (const case of cases) {
test(`test for case nr ${case.nr} doing ${case.title}`, async ({
myVariable = `some value ${case.objName}`;
})
}
test(`test for case nr 3 doing c`, async ({
console.log(myVariable); ==> outputs "undefined"
})
chatgpt 的 2 个建议。第一个是无用的,该变量默认为空值(显然)。第二种似乎是可能的,尽管未经我测试。我想避免自己创建比在同一文件中共享变量更复杂的东西,因为我编写它的自动化测试非常简单。它只是在应用程序中创建一个对象,获取其名称并更新该名称。
import { test, expect } from '@playwright/test';
let categoryName: string;
test.beforeEach(async () => {
// Inicjalizuj wartość categoryName przed każdym testem
categoryName = '';
});
for (const tytul of ['test1', 'test2']) {
test(`Test sparametryzowany - ${tytul}`, async ({ page }) => {
// Wykonaj operacje specyficzne dla danego scenariusza
await page.goto('https://www.example.com');
// Nadpisz wartość categoryName
categoryName = `Category_${tytul}`;
// Przykładowa operacja, która wykorzystuje wartość z danej iteracji
await page.fill('input[name="poleFormularza"]', 'WartośćTestowa');
await page.click('button[type="submit"]');
// Oczekuj na jakąś operację, możesz dostosować to do swoich potrzeb
await page.waitForSelector('div.wynik');
// Sprawdź, czy otrzymany wynik jest poprawny
const wynik = await page.textContent('div.wynik');
expect(wynik).toBe('Oczekiwany wynik dla WartośćTestowa');
});
}
// Test niepoddany parametryzacji, korzystający z nadpisanej wartości categoryName
test('Test bez parametryzacji', async ({ page }) => {
if (categoryName) {
console.log(`Używam nadpisanej wartości categoryName w teście bez parametryzacji: ${categoryName}`);
}
// Tutaj możesz dodać operacje specyficzne dla tego testu
});
import { Context } from '@playwright/test';
export interface SharedState {
categoryName: string;
}
export const sharedContext = new Context<SharedState>();
export const setCategoryName = (categoryName: string) => {
sharedContext.state.categoryName = categoryName;
};
export const getCategoryName = () => {
return sharedContext.state.categoryName;
};
____
test:
import { test, expect } from '@playwright/test';
import { setCategoryName, getCategoryName } from './sharedState';
test.beforeEach(async ({ context }) => {
// Inicjalizuj wartość categoryName przed każdym testem
setCategoryName('');
});
for (const tytul of ['test1', 'test2']) {
test(`Test sparametryzowany - ${tytul}`, async ({ page }) => {
// Wykonaj operacje specyficzne dla danego scenariusza
await page.goto('https://www.example.com');
// Nadpisz wartość categoryName
setCategoryName(`Category_${tytul}`);
// Przykładowa operacja, która wykorzystuje wartość z danej iteracji
await page.fill('input[name="poleFormularza"]', 'WartośćTestowa');
await page.click('button[type="submit"]');
// Oczekuj na jakąś operację, możesz dostosować to do swoich potrzeb
await page.waitForSelector('div.wynik');
// Sprawdź, czy otrzymany wynik jest poprawny
const wynik = await page.textContent('div.wynik');
expect(wynik).toBe('Oczekiwany wynik dla WartośćTestowa');
});
}
// Test niepoddany parametryzacji, korzystający z nadpisanej wartości categoryName
test('Test bez parametryzacji', async ({ page }) => {
const categoryName = getCategoryName();
if (categoryName) {
console.log(`Używam nadpisanej wartości categoryName w teście bez parametryzacji: ${categoryName}`);
}
// Tutaj możesz dodać operacje specyficzne dla tego testu
});
对您自己的建议进行一些小调整,似乎可以解决问题:
注意,
case
是保留名称,不能用作变量名称。
import { test } from "@playwright/test";
const testCases = [
{ nr: 1, title: "a", objName: "normal" },
{ nr: 2, title: "b", objName: "updated" },
];
let myVariable = "hi";
test.describe.configure({ mode: "serial" });
for (const testCase of testCases) {
test(`test for case nr ${testCase.nr} doing ${testCase.title}`, async () => {
myVariable = `some value ${testCase.objName}`;
});
}
test(`test for case nr 3 doing c`, async () => {
console.log(myVariable);
// Now logs: "some value updated" - as desired
});
一般而言,在测试之间共享变量是一种不好的做法,并且会使测试相互依赖,在文档中阅读一些关于测试隔离的好建议。