小编har*_*ded的帖子

导航后出现剧作家错误(目标已关闭)

我正在尝试一些非常简单的事情:

  • 导航至 google.com
  • 在搜索框中填写“奶酪”
  • 在搜索框按回车键
  • 打印第一个结果的标题文本

如此简单,但我无法让它发挥作用。这是代码:

const playwright = require('playwright');

(async () => {
  for (const browserType of ['chromium', 'firefox', 'webkit']) {
    const browser = await playwright[browserType].launch();
    try {
      const context = await browser.newContext();
      const page = await context.newPage();
      await page.goto('https://google.com');
      await page.fill('input[name=q]', 'cheese');
      await page.press('input[name=q]', 'Enter');
      await page.waitForNavigation();

      page.waitForSelector('div#rso h3')
          .then(firstResult => console.log(`${browserType}: ${firstResult.textContent()}`))
          .catch(error => console.error(`Waiting for result: ${error}`));
    } catch(error) {
      console.error(`Trying to run test on ${browserType}: ${error}`);
    } finally {
      await browser.close();
    }
  }
})(); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js playwright

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

如何在 Playwright 测试中获取元素的属性?

我正在尝试在测试中获取元素的属性。我的测试如下所示:

test(`Should be at least 5 characters long`, async({ page }) => {
  await page.goto('http://localhost:8080');
  const field = await page.locator('id=emailAddress');

  const _attribute = await field.getAttribute('minlength');
  const minlength = Number(_attribute);

  await expect(minlength).toBeGreaterThanOrEqual(5);    
});
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我可以看到该minlength值为0。这是因为_attributenull。但是,我不明白为什么。field是一个Locator. 但是,我似乎无法获取该属性或其值。我究竟做错了什么?

javascript playwright

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

IIS Express 7.5不会同时处理请求

刚刚安装了IIS Express 7.5,我正在尝试调试ASP.NET MVC 3应用程序中的并发问题.然而,我似乎无法让Web服务器同时处理请求,它们只是逐个执行.

我正在运行Apache Bench来模拟并发负载,但它刚刚排队.

有人有任何想法吗?

谢谢.

iis-express

17
推荐指数
1
解决办法
5990
查看次数

如何在 Playwright 中使用已安装的 chrome 版本?

我想使用铬而不是铬。我可以通过提供可执行路径在 puppeteer 中实现相同的目的。在 playwright 中它不起作用,因为浏览器类型参数仅支持“chromium、webkit、firefox”

const { chromium } = require('playwright');
(async () => {
    const browser = await chromium.launch({
        headless: false,
        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('http://whatsmyuseragent.org/');
    await page.screenshot({ path: `example-${browserType}.png` });
})();
Run Code Online (Sandbox Code Playgroud)

javascript webautomation node.js playwright

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

如何使用 Puppeteer 从 XHR 请求中获取 body / json 响应

我想从我用 Puppeteer 抓取的网站获取 JSON 数据,但我不知道如何取回请求的正文。这是我尝试过的:

const puppeteer = require('puppeteer')
const results = [];
(async () => {
    const browser = await puppeteer.launch({
        headless: false
    })
    const page = await browser.newPage()
    await page.goto("https://capuk.org/i-want-help/courses/cap-money-course/introduction", {
        waitUntil: 'networkidle2'
    });

    await page.type('#search-form > input[type="text"]', 'bd14ew')  
    await page.click('#search-form > input[type="submit"]')

    await page.on('response', response => {    
        if (response.url() == "https://capuk.org/ajax_search/capmoneycourses"){
            console.log('XHR response received'); 
            console.log(response.json()); 
        } 
    }); 
})()
Run Code Online (Sandbox Code Playgroud)

这只是返回一个承诺挂起函数。任何帮助都会很棒。

javascript webautomation node.js puppeteer

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

使用 Playwright 按顺序运行分组测试

我将 Playwright 与 Nodejs 一起使用,并且将几个测试分组在一起,如下所示

import { test, expect } from '@playwright/test';

test.describe('Add a simple invoice test', () => {
    test('01.Login & add an invoice', async ({ page }) => {
        await page.goto("https://someUrl.com");
        await page.fill('input[id="email"]', "someEmailAddress");
        await page.fill('input[ng-model="ctrl.user.password"]', "somePassword");
        await page.click('button[id="login-btn"]');
    });

    test('02.Add an invoice', async ({ page }) => {
        await page.click('[name="invoice"]');
        await page.click('button[id="addInvoiceButton"]');
        await page.click('a[ng-click="ctrl.goToAddInvoice()"]');
        await page.fill('#invoiceTitle', Math.random().toString(36).substring(7));
        await page.fill('#exampleInputAmount', "120");
        await page.click("#invoiceCategory")
        await page.fill("#invoiceCategory > input", "Car")
        await page.keyboard.press("Enter");
        await page.click('button[id="submitInvoiceButton"]');
    });
});
Run Code Online (Sandbox Code Playgroud)

问题是这两个测试并行运行,而 02 依赖于 01,因为需要登录。 …

automated-tests node.js typescript playwright

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

puppeteer 等待元素消失或从 DOM 中移除

有没有什么办法或 Puppeteer API 可以等待元素从 Dom 中消失或移除,然后继续执行?

例如,我有一个加载动画,我想等到这个加载动画从 Dom 中移除。

javascript webautomation node.js puppeteer

13
推荐指数
2
解决办法
7594
查看次数

Headless 浏览器图像质量 - Headless chrome、phantom js、slimmer js

我正在寻找有关无头浏览器中发生的事情的更多信息。过去我一直在使用不同的无头浏览器,例如slimmerJSPhantom.jsHeadless Chrome,目的是在不同的站点上截取屏幕截图。

我从来没有生成过与您在浏览器中看到的相似的真实、清晰质量的图像,它看起来像是一种工具限制,例如,这是您可以从中获得的最高质量,但我想了解为什么,以及可能如何使它变得更好。

请比较下面的例子。

  1. 在这个网站https://en.wikipedia.org/wiki/Main_Page 中,在左上角找到维基百科标志。
  2. 这是无头 chrome 通过 puppeteer 截取的那个标志的截图:

在此处输入图片说明

如果将真实网站与屏幕截图进行比较,您可以看到图像是如何模糊的。在这个例子中,它只是一个图像,但这也发生在 HTML 文本中。

现在,如果我要使用我的计算机截取屏幕截图,无论是 windows、mac 还是 linux,我都会得到一个质量非常好的屏幕截图,看起来完全像真正的交易。

那么为什么会发生这种情况呢?我尝试了所有标准的事情,例如在每个库中设置最高质量的屏幕截图,并设置一个足够大的视口,以便屏幕截图具有合适的分辨率。这真的是您可以从无头浏览器屏幕截图中获得的最高质量吗?

对这方面的任何启示将不胜感激。谢谢!

javascript webautomation node.js google-chrome-headless puppeteer

13
推荐指数
1
解决办法
2507
查看次数

在 Puppeteer 中连接浏览器

是否可以将浏览器连接到 puppeteer 而无需在 puppeteer 中实例化它?例如,像普通用户一样运行一个 Chromium 实例,然后在代码中将它连接到一个 puppeteer 实例?

javascript google-chrome webautomation node.js puppeteer

11
推荐指数
1
解决办法
8087
查看次数

剧作家“没有发现测试。” 在 example.spec.ts 的简单副本上

我刚刚安装了 playwright (v1.18.1) 来尝试一下 (Windows 11),我感觉有些不对劲。我可以正常运行 example.spec.ts 脚本,但如果我复制该文件然后尝试运行该副本,则会出现错误no tests found.

\n

这些步骤看起来很基本...

\n

首先测试运行 C:\\playwright\\test\\tests\\example.spec.ts 脚本...

\n
C:\\playwright\\test\\tests>npx playwright test example.spec.ts\n\nRunning 25 tests using 1 worker\n\n  -  example.spec.ts:14:3 \xe2\x80\xba New Todo \xe2\x80\xba should allow me to add todo items\nTerminate batch job (Y/N)?\n\n  25 skipped\n
Run Code Online (Sandbox Code Playgroud)\n

[这样有效]然后创建一个副本来开始玩......

\n
C:\\playwright\\test\\tests>copy example.spec.ts test4.ts\n        1 file(s) copied.\n
Run Code Online (Sandbox Code Playgroud)\n

但在编辑 test4.ts 之前,我检查它是否会运行...

\n
C:\\playwright\\test\\tests>npx playwright test test4.ts\n\n=================\n no tests found.\n=================\nnpm ERR! code 1\nnpm ERR! path C:\\playwright\\test\\tests\nnpm ERR! command failed\nnpm ERR! command C:\\WINDOWS\\system32\\cmd.exe /d …
Run Code Online (Sandbox Code Playgroud)

javascript webautomation playwright

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