标签: playwright

Playwright 测试运行器:将测试限制为仅在一个浏览器中使用包含多个项目的配置文件

我有一个包含许多项目的测试配置文件(playwright.config.ts)。

通常,我想测试几种不同的浏览器。

但是,当我构建测试时,我只想使用单个浏览器/项目进行测试(因为在我处理测试时测试将会失败)。

我尝试了这个命令:

npx playwright test test.ts --browser='chromium'
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

错误:配置文件定义项目时无法使用 --browser 选项。请在项目中指定 browserName。

如何“在项目中指定 browserName”以限制测试在一个浏览器上运行?

我的配置文件:

const config: PlaywrightTestConfig = {
  projects: [
    {
      name: 'Chrome Stable',
      use: {
        browserName: 'chromium',
        channel: 'chrome',
      },
    },
    {
      name: 'Safari MacBook Air',
      use: {
        browserName: 'webkit',
        viewport: {
          width: 2560,
          height: 1620,
        },
      },
    },
    {
      name: 'Firefox Desktop',
      use: {
        browserName: 'firefox',
        viewport: {
          width: 1920,
          height: 1080,
        },
      },
    },
    {
      name: 'iPhone 6/7/8',
      use: devices['iPhone 8'], …
Run Code Online (Sandbox Code Playgroud)

playwright

6
推荐指数
1
解决办法
9202
查看次数

使用 codegen 命令打开时,剧作家不接受 https 网址

npx playwright codegen https:/// page.goto: net::ERR_CERT_AUTHORITY_INVALID 位于 ...

如何通过 codegen 命令传递输入参数或身份验证凭据来打开 https url

playwright

6
推荐指数
1
解决办法
2万
查看次数

相当于剧作家中的 by.name 选择器

我一直在尝试学习剧作家,在实现过程中,我尝试编写一个测试用例,通过名称查找输入元素并用一些值填充它

不幸的是,该元素只有类和名称属性。我一直在尝试找到一种阅读它的方法,但没有在文档中找到任何内容,或者我可能错过了

请帮忙

css-selectors playwright playwright-test

6
推荐指数
1
解决办法
1万
查看次数

在 Puppeteer/Playwright 中通过标签文本选择输入

给出以下标记:

<label for="name">Name</label>
<input type="text" id="name" />
Run Code Online (Sandbox Code Playgroud)

我想在剧作家测试中填写输入值。但是,我更喜欢遵循类似于测试库的范例,它像真实用户一样使用选择器(通常是可见的文本内容)。因此,我希望我的剧作家选择器使用标签文本。

当我尝试以下操作时,我收到错误element is not an <input>,因为它选择了实际的标签元素: await page.fill('"Name"')

还有其他方法可以实现这一目标吗?

注意:我不热衷于使用 Playwright 测试库包,因为它还不够成熟。另外,我的理解是 Puppeteer 和 Playwright 实际上是相同的,因此为什么这个问题适用于这两个框架。

puppeteer playwright

6
推荐指数
1
解决办法
1万
查看次数

使用 Playwright 在单个测试中使用多个测试装置

// foo.ts
import { test as base } from "@playwright/test";

const test = base.extend<{foo: string}>({
    foo: "hello"
});

export { test };
Run Code Online (Sandbox Code Playgroud)
// bar.ts
import { test as base } from "@playwright/test";

const test = base.extend<{bar: string}>({
    bar: "bye"
});

export { test };
Run Code Online (Sandbox Code Playgroud)
// index.ts
import { test } from /* BOTH_FOO_AND_BAR??? */;

test("Basic test", async ({ foo, bar }) => { // <-- I want to be able to use both foo and bar fixture here
    console.log(foo);
    console.log(bar); …
Run Code Online (Sandbox Code Playgroud)

typescript playwright playwright-test

6
推荐指数
1
解决办法
5032
查看次数

如何在 Jupyter 笔记本中使用 Playwright 库而不是使用常规 .py 脚本(在 Windows 上)

我想使用自动浏览器并使用 jupyter 笔记本单元而不是使用 .py 脚本执行我的步骤。这与名为 selenium 的浏览器自动化库配合得很好。

它不适用于名为 Playwright 的库。事实上它根本不起作用。我尝试了他们在手册中提供的每一行代码。jupyter 笔记本上什么都不起作用。只要将相同的代码复制粘贴到某个 .py 文件中并执行它,一切都可以在我的机器上正常运行。我正在谈论的各种示例可以在这里找到: https: //playwright.dev/python/docs/intro

我真的不明白为什么我无法让它在 jupyter 笔记本中工作,特别是如果它在几乎每个 .py 文件中都能正常工作的话。

编辑:显然它可以在 Mac 上运行,但我使用 Windows

python webdriver python-3.x playwright playwright-python

6
推荐指数
1
解决办法
7329
查看次数

如何在 Playwright 中将 page.waitForSelector 用于两个选择器之一?

我正在尝试等待一个具有两个可能的 id 之一的 div,div#abc或者div#efg.

div#abc我可以这样等待:

    await this.page.waitForSelector('div#abc');
Run Code Online (Sandbox Code Playgroud)

但我如何告诉 Playwright 我也希望该步骤通过(如果div#efg存在)?

playwright

6
推荐指数
1
解决办法
2万
查看次数

如何在 Javascript 的 Playwright Tests 中运行代码时防止浏览器关闭

我正在尝试在浏览器中记录网络调用。对于我的用例,我要求浏览器处于打开状态,并且只能使用脚本关闭。我目前正在使用 page.pause() 函数来防止浏览器自动关闭。有没有其他方法可以防止浏览器自动关闭。

test('Verify home page Load event',async({page})=>{
//const browser = await chromium.launchPersistentContext("",{headless:false});
await page.goto("https://samplesite.com")


await page.on('request',req=>{
    const requestUrl = req.url();
    if(requestUrl.indexOf("google-analytics.com/collect")>-1){
        console.log("Intercepted:->"+requestUrl);
        
    }else{            
        req.continue
    }        
}) 

await page.pause();
Run Code Online (Sandbox Code Playgroud)

})

我尝试检查Python的[链接](How to keep browser opening by the end of the code running with playwright-python?),但无法将其应用于JS。

javascript ui-automation node.js playwright

6
推荐指数
1
解决办法
2万
查看次数

Python Playwright 启动最大化窗口

我在最大化 Python 中启动 Playwright 时遇到问题。我找到了一些其他语言的文章,但在Python中不起作用,官方文档中也没有写关于Python中最大化窗口的内容。

我试过browser = p.chromium.launch(headless=False, args=["--start-maximized"])

它开始最大化,但随后自动恢复到默认的小窗口大小。

有任何想法吗?谢谢

python playwright playwright-python

6
推荐指数
1
解决办法
4510
查看次数

Playwright 使用 Firebase 进行“重用状态”和“重用身份验证”

我试图确保在每个运行的测试中,我不必登录到我正在测试的平台。为了实现这一目标,我正在实施“重用状态”和“重用身份验证”。但是,Firebase 使用 indexedDB 而不是 Cookie 或 SessionStorage。StorageState 此处不持久保存 indexedDB。也许你知道这个问题的解决方案?

全局设置.ts:

import { Browser, chromium, expect, Page } from "@playwright/test";

async function globalSetup(){
  const browser = await chromium.launch({headless: false});
  const context = await browser.newContext();
  const page: Page = await context.newPage();
  await page.goto("<'url'>")
  await page.getByLabel('Email').fill('<'email'>');
  await page.getByLabel('Password').fill('<'password'>');
  await page.getByRole('button', { name: 'Sign in' }).click();
  await expect (page.getByRole('link', { name: 'logo' })).toBeVisible({ timeout: 30000 });

  //save state
  await page.context().storageState({ path: "./LoginAuth.json" });

  await browser.close();
}

export default globalSetup;
Run Code Online (Sandbox Code Playgroud)

有用的链接:

https://playwright.dev/docs/auth#reuse-authentication-in-playwright-test https://github.com/microsoft/playwright/issues/11164

testing automation firebase typescript playwright

6
推荐指数
1
解决办法
601
查看次数