标签: playwright

如何期望计数大于或小于?

使用PlaywrightPython,我如何期望计数大于或小于?

例如,此代码期望计数为 2。

如何实现计数 >= 2 (仅更大)

expect(self.page.locator('MyLocator')).to_have_count(2, timeout=20 * 1000)
Run Code Online (Sandbox Code Playgroud)

python playwright playwright-python

3
推荐指数
1
解决办法
1242
查看次数

剧作家无法拦截所有请求

const { webkit } = require('playwright');

(async () => {
  const browser = await webkit.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();

  // Log and continue all network requests
  page.route('**', route => {
    console.log(route.request());
    route.continue();
  });

  await page.goto('https://www.sahibinden.com');
  //await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

当我在隐身窗口中打开它并使用 fiddler 拦截时,我能够获得这些标题:

X-Client-SrcPort: 49784
Accept-Language: en-US,en;q=0.9
X-J3PopQvX-a: eRELp_ivj7vKEvBmbMRSG-kfU55GIHd5Wc4a06qtEa8-W4hUa90nd0GhKDAoOzTOE6nbdU270qt3pEYVVmFKgVTToiLUqAr9yF684URRjFEdbaPsZXZSQYAJBYyvVsSi_K44SKCEGPl3aAksgQ35gw27vJvvBuscZzVhLbW5PQgfeiMKVbRrWpbR5xHUuVtZ2WWJm7HboV5kXXpkiMPA5vOktA-g4mGZm_zh6ag-OMFmLSfnepSm4PEc=xUFop6_-RYgRLI020e8S8uXXWsuQR95QLXnPCQHvZ3yRFRBtHAG6j0natnjXAxodDcm2Z_tiq7H36uRojXmBVE6A=BwWr0j-cXmsXEuSiKPairOZ6lOskntyNSoE0mao=ge0YrWgZnvEWQIb8FPadYSSufxYmxuGVur0v-5RBRcw=VCk6e6d2sbMDmuvr6zR-F_T_A4K-q-8LlnXywUUfpqG-GInbAyExoE5QdJoRiI8IdTX5NHY0uzddRbfuV9ItOwwY-0iYSMgQ=Aqr=XLeqozjSV7r_Enq0FPcQjNklgG6unf=I3VMURNTQb42pvqWK5RSa-FAD3bTCp4a_OAV=Zx3cIV9JTsSpKKMmFo5q4PMPbj9boGSLSqORhvP95PwMAxyEeMUNbnorRlVOlKH3h2h2sH9rf768CgsXo-GMzCWwQXfoEuKGyl2vRQeP_rddkJ3RHuawS=Z38p69xNcjXr9J_zX4YVoAdXxN56Jm=Qo5K8Xsz3ndwSuvBJYnPXfXNr9Et80GYIjcx-TOkr5ZmPAbRIHkZVKacYvNG_utrkSQmn63IYYydikScedTdnUW5ky=gW3sliikzmZh-cRGaGIaA7FD5Un0Gc8TER6x_mKq-vL5nSuCOnHmzRTNBXZteNk8Gghe6V=ZnRNfCWFeiijdqPP0iPohDEhnjtA32h5vvyCgkx6UWBhAqSsU4IJWGPx8v9S3NtcBuYgTdexPHjnpYVF2CjufPFq0YVL5-di_ATRDfQktSh9gnBdYtIP9ejYLrq6kW6bBm5dxJkgGFD2aEz4bO2QEvoMJ=kuQGc34MBpAG2=PmtA9TErE0WfFftgec-sQfDFn2v4kerFl88C6lGdR=QQu3RBYOdW3V2ZDOONEmzXKAWQDpEZtBrID0Sb8mkQFLcOlbN28tcR8kpha_2E=DgBgLETJE_NqLs=60RdznfPKTcbGmrpBpIZGUKYGoqYzu7AHG-U9MtUAzPP-PVrgA=uOHqN_iFtPl_SCREmnCCLmihX=SsiMCGtaTqvw3RHLYhcUociEskbQh8a4wpniDSp5OM82AHGyrRJK0b29J_KzEgzeGlNn-CLTa=8aaJRfXIIBxHs9Jr6o9Q2DKuwKxvLJpN9kkSMLNbn9Q8R7NeeEeR9oECc9D8h8WjCGkCYJXIPtp-0hpRrlkvvF5ezZhFE0D=GewHdENPEj7CTjqfClVQ=gtzPQF6lG8UX9SKYKxOdyH-jKXJNp2KYWNFTWXS6ZHc56hsw9apvtbxuMciLZYjd4ZGFmLOpHsd7liyRk3QalSm0zxCnnOAL88S=VKDvdWm_qHkslUSEYOOznKY6wqfMlUUxIvRQISzWKY56ajlfyx0qEY6VHuiWbph2kwLGyuVZ6zwmO7RtVCiwp3poGfEnaA2ILv2IwjYm_BIcw8W2joV5G5LwkyEoeUquQWGg9EI_NEW4TO=wKOnmnwFI_f43k595lTHhiYCAwamNnFuiTXA4ZjE5J3S_O45altEdQCYJyJey2K5_iUa--qTmB3OLVZcDA05jN9TTer=-8BCZm=B9F=L=oHYSUlUC=TuzgBRH52I9BnRHDhLW8-U5yy-zYuoq55W-pboEVmlpIocbkE5A6v4gZkgxkLMKk9OzhOGNe7IgIZ=rzP7ocA0CfIKUj80anZlQj8FpVapjmpjWfJlxiZQ9oVcxZWWeSZ9ZKbrGBbx4kja_kjZeVhXOtH0MQLdyqtjIuPKK9pFkvpAOBRv4xrDPpZPOzi59F97zhc2IPhNlgEq9-Dvnl2w40xKRnjBS2cihGy_s2HI2Rf8HsrtHqrWuVtZ7clf2pEwHmdEzIr3aIHSwRzIma_ymwUZ3y4mPqs_d=JtpbqFqd6xykIT_=6Ftz_tqDC4xgTsNUL7-f57F45qpTw5QUNi7CpNUR=wvGhEOskiY2A60ID8IzGlz5hAu785vhseZHnv2fIl5KeH=I=2TH7wJGsUQ-=XMMzg5O8f940hyGJ-y4cHvWppYDK6J6LRvU-AR_Ojb4YgGj9DXgWIWCFrbiS0XY53O-_MvUfsLiURAmsfy5ReKw6-i=rTJ-kN_tf7xcOEbHNCVjFR=ZpJV6LIsI2S5loedjIRHWPhqVI5rJe-NXLs9bo53qnYsWFHbMonxaERtC2ZTYAhbWZglUGHAjv-hqvq22kCGb5fCte6Zb5brvE9CPI8Y8PZ7BCFfcbTpLOAesvHNAxJMaBUVhRGOoYVAL7tq5E-FVmH9L=bdbBgOAXR9s5lHwMRleEOIpqHuyC32z5CC75FAJVly8IP7vLjCjKrDHhNu6yc_5MOvbOQO8CCr0TwLj_XsoSkshH9Q5ICGARL64Ts8F7pmDKC9EDyKR7lZ-tkAJXcCgJd_KCIGnHfULSlwoFrj5QPcVYvGMcaY3Jl4rjyIhctEKXkUiGDwzpjnYbhzVBpsIR=LW6VLVxQXinIFkyBob7lFlyX_y=Gm=5garfnBd29OZWjfym0qh0Em24hJXlbWE7ufXNFUAA8dPNfzjsFk=hOtnpqAokP56vsnOnK0Jl_fOl=5ycCZG6rqGeIDXbRbM_AEy=CPJbE_wbbB2S2Mp9g49Bv9tn_S3LPG_aA_aAWGVDSIVs-3=kwdIybN8y
X-J3PopQvX-d: AAaCxAiBBKCMgcGASZAQgICAACIqGSI6QDSXAaoclOq4s6T2AkpRq7ZjyDmvHZIRbYeFd-E
X-Forwarded-For: 39.41.162.210
X-Forwarded-Proto: https
X-J3PopQvX-f: A3r8AMZyAQAABWpomSNWTAA_aOd-ML0d_DenMFOwBhK_GRxSWvW5FLJRxZ2sAScpotKucnW8wH8AAEB3AAAAAA==
X-J3PopQvX-c: ACCn_sVyAQAAdkviREb3CdA4iVdSrR4-Gc4Y3RxJWrLhnUx8XioZIjpANJcB
X-TLS-Version: 771
X-J3PopQvX-z: q
Run Code Online (Sandbox Code Playgroud)

但是我无法通过执行上面的代码来获取这些标头。我如何获得这些?

编辑:我使用了答案,效果很好。只有一个缺失的部分。

page.route('**', route => {
    const request = route.request() …
Run Code Online (Sandbox Code Playgroud)

http request node.js playwright

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

在 Playwright 中禁用 Javascript

是否可以定义禁用 Javascript 的浏览器来模拟爬虫如何查看页面?应该有一个可以通过的选项。

playwright

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

我如何切换到新的弹出窗口,例如在剧作家中点击“用谷歌注册”时

我正在尝试访问谷歌在剧作家中注册的新弹出窗口,但无法做到这一点。

await page.waitForSelector(signUpWithGoogle, { state: 'visible' })
await page.focus(signUpWithGoogle)
await page.click(signUpWithGoogle)
await page.fill('//input[@type="email"]', email)
Run Code Online (Sandbox Code Playgroud)

javascript webautomation jestjs e2e-testing playwright

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

用剧作家填写条纹元素卡

我想使用 Playwright 填充条纹卡元素

常规定位器似乎不起作用。例如,以下示例不执行任何操作:

await page.fill('iframe input[name="cardnumber"]', '4242424242424242')
Run Code Online (Sandbox Code Playgroud)

如何使用 Playwright 填写卡输入信息(号码、CVC、有效期、邮政编码)?

stripe-payments playwright

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

Playwright 浏览器正在重新打开每个测试语句

如何阻止浏览器在每次测试语句完成后重新打开?我的意思是下面的代码应该在 1 页中继续。为什么浏览器关闭,再次打开并执行第二个测试。如何预防呢?谢谢


  test('When user logs in', async ({page}) => {
    const commonAction = new CommonAction();
    await commonAction.gotoPage(page);
    await expect(page).toHaveURL('https://uat.mercator.createit.dev/login');
    await commonAction.login( page, janEmail, janPasswd );
  });

  test('Then user is in my account page', async ({page}) => {
    const navigationAction = new NavigationAction();
    await navigationAction.verifyAccountPage(page);  
  });
  
  test('When user goes to newsletter subscriptions', async ({page}) => {
    const navigationAction = new NavigationAction();
    await navigationAction.goToNewsSubscription(page);  
  });

  test('Then user is in Newsletter subscription page', async ({page}) => {
    const navigationAction = new NavigationAction(); …
Run Code Online (Sandbox Code Playgroud)

javascript playwright

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

如何单击与 Playwright 选择器匹配的所有链接?

我正在使用 Playwright 来抓取一些数据。如何单击页面上与选择器匹配的所有链接?

const { firefox } = require('playwright');

(async () => {
  const browser = await firefox.launch({headless: false, slowMo: 50});
  const page = await browser.newPage();
  
  await page.goto('https://www.google.com');
  
  page.pause(); // allow user to manually search for something
  
  const wut = await page.$$eval('a', links => {
    links.forEach(async (link) => {
      link.click();           // maybe works?
      console.log('whoopee'); // doesn't print anything
      page.goBack();          // crashes
    });
    return links;
  });

  console.log(`wut? ${wut}`); // prints 'wut? undefined'

  await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

一些问题:

  1. console.log里面$$eval没有做任何事情。
  2. page.goBack() …

javascript playwright

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

有没有办法在 Playwright 中返回响应正文?

我正在与剧作家合作。我想从网络事件中获取响应正文(HTML),而不是等待 DOM 在浏览器中加载数据,然后解析元素。当前的工作流程看起来是这样的:

  1. 剧作家开启无头铬
  2. 使用验证码打开第一页(无数据)
  3. 解决验证码并重定向到包含数据的页面

有时会返回大量数据,并且页面需要相当长的时间才能在浏览器中加载,但所有数据都已在网络事件中从客户端接收。我的问题是可以在 Playwright 中获取网络事件,而不是等待所有元素加载。

我找到了Network Events文档,并且能够获取 HTML,但它返回所有请求而不是单个请求。

我使用 Playwright 只是为了导航、表单提交和获取网站 HTML。

python playwright

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

如何忽略 playwright 中设备的 HTTPS 错误?

我正在编写剧作家测试并在我的本地计算机上测试它们,该计算机具有 SSL,但证书经常给出错误。

我想在本地计算机上进行开发时忽略所有与 HTTPS 相关的错误。(我将使用有效的证书在云中进行最终测试。)

对于浏览器,您可以像这样ignoreHTTPSErrors添加:contextOptions

const config: PlaywrightTestConfig = {
  projects: [
    {
      name: 'Safari MacBook Air',
      use: {
        browserName: 'webkit',
        viewport: {
          width: 2560,
          height: 1620,
        },
        contextOptions: {
          ignoreHTTPSErrors: true,
        },
      },
    },
Run Code Online (Sandbox Code Playgroud)

但是,我找不到类似的选项devices

{
  name: 'iPhone 6/7/8',
  use: devices['iPhone 8'],
},
Run Code Online (Sandbox Code Playgroud)

如何忽略设备的 HTTPS 错误?

playwright playwright-test

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

使用 NX 进行剧作家测试

我有一个 NX 工作区,其中有一个名为 的应用程序my-app。我想my-app使用 NX 控制台运行应用程序的 Playwright 测试。目前 NX 不支持 Playwright 插件,因此我根据本教程创建了一个自定义 NX 执行器。我已经为执行者创建了必要的文件。之后,我在应用程序的project.json文件中注册了自定义 e2e 命令。剧作家配置文件保留在该my-app文件夹中。

当我运行时nx run my-app:e2e,执行程序已被执行,但由于某种原因,剧作家没有启动。相反,我看到一个错误。

在此输入图像描述

当我在控制台中手动运行时,剧作家触发的命令启动并进行必要的nx run my-app:e2e测试。npx playwright test --config=apps/my-app/playwright.config.ts

项目.json

...
...
...
"e2e": {
  "executor": "./tools/executors/playwright:playwright",
  "options": {
    "path": "apps/my-app/playwright.config.ts"
  }
}
Run Code Online (Sandbox Code Playgroud)

执行器.json

{
  "executors": {
    "playwright": {
      "implementation": "./impl",
      "schema": "./schema.json",
      "description": "Runs Playwright Test "
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

隐含的ts

export default async function echoExecutor(
  options: PlaywrightExecutorOptions, …
Run Code Online (Sandbox Code Playgroud)

node.js playwright nx-workspace

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