/* Test against mobile viewports. */
{
name: 'Mobile Chrome',
grep: /mobile/,
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
grep: /mobile/,
use: { ...devices['iPhone 14 Pro'] },
},
当我运行此操作时,它将在桌面浏览器中运行测试,而不是移动窗口。我已经看到了按测试设置视口的示例,而不是模拟器本身。
我希望能够有1个规格文件来描述移动和桌面仿真,而不是按设备类型分开。
我可以按测试设置目标模拟器吗?
我不想使用过滤器运行;相反,我运行了测试,他们针对目标浏览器/S.单独执行。
您的方法基本上还可以,有一些改进。对于初学者,这是您的代码作为一个充分工作的,可重复的示例。
与
example.test.js:
grep
Playwright.config.js:
import {expect, test} from "@playwright/test"; // ^1.51.0
const html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="text"></div>
<script>
function updateText() {
const textElement = document.getElementById("text");
textElement.textContent =
window.innerWidth <= 900 ? "mobile" : "desktop";
}
updateText();
window.addEventListener("resize", updateText);
</script>
</body>
</html>`;
test("mobile check", async ({page}) => {
await page.setContent(html);
await expect(page.locator("#text")).toHaveText("mobile");
});
test("desktop check", async ({page}) => {
await page.setContent(html);
await expect(page.locator("#text")).toHaveText("desktop");
});
样本运行:
import {defineConfig, devices} from "@playwright/test";
export default defineConfig({
projects: [
{
name: "Mobile Chrome",
grep: /mobile/,
use: {...devices["Pixel 5"]},
},
{
name: "Mobile Safari",
grep: /mobile/,
use: {...devices["iPhone 14 Pro"]},
},
],
});
% npx playwright test
Running 2 tests using 2 workers
✓ 1 [Mobile Chrome] › example.test.js:23:5 › mobile check (261ms)
✓ 2 [Mobile Safari] › example.test.js:23:5 › mobile check (465ms)
2 passed (930ms)
grep
模式匹配,则每个测试都将进行,无论测试是否移动!
这样,首选的方法是使用thags
不太容易出现像这样的不准确性。 标签Playwright.config.js:
grep
example.test.js:
import {defineConfig, devices} from "@playwright/test";
export default defineConfig({
projects: [
{
name: "Mobile Chrome",
grep: /@mobile/,
use: {...devices["Pixel 5"]},
},
{
name: "Mobile Safari",
grep: /@mobile/,
use: {...devices["iPhone 14 Pro"]},
},
],
});
输出:
test("mobile check", {tag: "@mobile"}, async ({page}) => {
await page.setContent(html);
await expect(page.locator("#text")).toHaveText("mobile");
});
test("desktop check", {tag: "@desktop"}, async ({page}) => {
await page.setContent(html);
await expect(page.locator("#text")).toHaveText("desktop");
});
和% npx playwright test
Running 2 tests using 2 workers
✓ 1 [Mobile Safari] › example.test.js:23:5 › mobile check @mobile (531ms)
✓ 2 [Mobile Chrome] › example.test.js:23:5 › mobile check @mobile (290ms)
2 passed (1.1s)
isMobile
和
test.skip()
是另一个选择:Playwright.config.js
isMobile
example.test.jstest.skip()
输出:
import {defineConfig, devices} from "@playwright/test";
export default defineConfig({
projects: [
{
name: "Mobile Chrome",
use: {...devices["Pixel 5"]},
},
{
name: "Desktop",
use: {...devices["Desktop Chrome"]},
},
],
});
块级别使用这些方法来创建一组测试。