标签: playwright

如何缓存剧作家的结果,以便下次调用相同的 URL 时,它可以直接从缓存中提取?

我正在反应应用程序中运行剧作家。我的目标是立即返回缓存结果的结果。

下面是能够设置和获取缓存。但下次请求相同的 URL 时,它的行为就好像它没有保存在缓存中一样。我缺少什么?

const { chromium } = require('playwright');
const LRU = require('lru-cache');

const cache = new LRU({
  max: 500,  // Max number of entries in the cache
  ttl: 86400 // Time to live for an entry in the cache, in milliseconds
});

async function fetchHTML(url) {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();
  page.setDefaultTimeout(10000);
  // Check if the URL is in the cache
  let html = cache.get(url);
  if (html) { …
Run Code Online (Sandbox Code Playgroud)

javascript caching lru playwright

5
推荐指数
0
解决办法
1130
查看次数

错误:locator.click:错误:严格模式违规:getByRole('button', { name: 'Statements' }) 解析为 2 个元素:

当我运行测试时,出现以下错误。我对剧作家和编码相当陌生,所以我不确定解决方案是什么

\n
Error: locator.click: Error: strict mode violation: getByRole(\'button\', { name: \'Statements\' }) resolved to 2 elements:\n1) <button title="Statements" aria-label="Statements" data-\xe2\x80\xa6>Statements</button> aka locator(\'#lp_line_6_a11y_queue\').getByRole(\'button\', { name: \'Statements\' })\n2) <button title="Statements" aria-label="Statements" data-\xe2\x80\xa6>Statements</button> aka locator(\'#lp_line_6\').getByRole(\'button\', { name: \'Statements\' })\n
Run Code Online (Sandbox Code Playgroud)\n

我刚刚进行了测试,希望不会出现错误。

\n
test(\'test\', async ({ page }) => {\n  await page.goto(\'https://www.test.com\');    \n  await page.getByPlaceholder(\'Section tag #1\').click();\n  await page.getByPlaceholder(\'Section tag #1\').press(\'Control+a\');\n  await page.getByPlaceholder(\'Section tag #1\').fill(\'inapptest\');\n\n  await page.getByRole(\'button\', { name: \'UPDATE\' }).click();\n  await page.getByRole(\'button\', { name: \'Message us\' }).click();\n  await page.getByPlaceholder(\'Enter text here\').click();\n  await …
Run Code Online (Sandbox Code Playgroud)

typescript playwright

5
推荐指数
1
解决办法
6284
查看次数

如何在 Playwright 中模拟服务器端请求

我正在尝试找到有关如何使用 Playwright e2e 测试模拟服务器端请求的任何文档或示例。Playwright 的官方文档分享了如何模拟/拦截客户端调用的示例。https://playwright.dev/docs/mock

在由 Next.js 为 SSR 提供​​支持的 React 应用程序中,有没有办法在返回给客户端之前模拟 API 调用?

mocking reactjs e2e-testing next.js playwright

5
推荐指数
0
解决办法
1671
查看次数

剧作家按钮点击效果不可预测

我至少有三个选项可以单击按钮:

\n
    \n
  1. await page.Locator("button", new() { HasText = "\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd1\x82\xd1\x8c" }).ClickAsync();
  2. \n
  3. await page.GetByRole(AriaRole.Button, new() { Name = "\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd1\x82\xd1\x8c" }).ClickAsync();
  4. \n
  5. await page.GetByText("\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd1\x82\xd1\x8c") .ClickAsync();
  6. \n
\n

根据我的实际观察,我执行此操作的页面可以在 HTML 标记中为此按钮提供 2 个选项:

\n
    \n
  1. 选择器:#app-content > div > div > div._1hAP9 > div > div.f\\\\+e\\\\+A > button\nxpath:/html/body/div[1]/div[1]/div[2]/div/div/div[4]/div/div[2]/button
  2. \n
  3. 选择器:#app-content > div > div > div._1hAP9 > div > div > button\nxpath:/html/body/div[1]/div[1]/div[2]/div/div/div[7]/div/div/button
  4. \n
\n

同时,从开发者控制台document.querySelector将在两个 HTML 变体的两个路径中找到该按钮。但从剧作家的角度来看,他们有时有效,有时无效。同时,执行继续进一步执行命令,就好像进行了单击一样,尽管实际上并没有发生(我使用参数观察了浏览器的行为headless=false)。

\n

另外,Force = true …

asp.net playwright playwright-dotnet

5
推荐指数
0
解决办法
1122
查看次数

木偶师/剧作家:如何获得授权:不记名令牌并传递给请求(例如 axios)?

我已登录网页,使用木偶师/剧作家导航到目标网页,并希望根据请求下载 csv 文件。

请求标头包括 Authorization: "Bearer eyJ0eXAiOiJKV......"

是否可以从木偶师/剧作家那里获得授权:“承载令牌”并将其提交给请求(例如axios)。

非常感谢

node.js puppeteer playwright

4
推荐指数
1
解决办法
6844
查看次数

在 Playwright 中获取输入元素的值

我如何返回 elem 的值,以便我可以验证它是真的1

const elem = await page.$('input#my-input')
await elem.fill('1')
Run Code Online (Sandbox Code Playgroud)

playwright

4
推荐指数
3
解决办法
4454
查看次数

使用 Playwright for Python,如何选择(或查找)一个元素?

我正在尝试学习 Python 版本的 Playwright。看这里

我想学习如何定位一个元素,以便我可以用它做事。就像打印内部 HTML,点击它等等。

下面的示例加载页面并打印 HTML

from playwright import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.newPage()
    page.goto('http://whatsmyuseragent.org/')
    print(page.innerHTML("*"))
    browser.close()
Run Code Online (Sandbox Code Playgroud)

此页面包含一个元素

<div class="user-agent">
    <p class="intro-text">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4238.0 Safari/537.36</p>
</div>
Run Code Online (Sandbox Code Playgroud)

使用 Selenium,我可以找到元素并像这样打印它的内容

elem = driver.find_element_by_class_name("user-agent")
print(elem)
print(elem.get_attribute("innerHTML"))
Run Code Online (Sandbox Code Playgroud)

我怎样才能在剧作家中做同样的事情?

python webautomation playwright playwright-python

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

使用 Playwright for Python,如何等待字段/选择器结果更改

使用 Playwright for Python,我想等待内容更改。

我可以像这样获取选择器的内容

month = page.querySelector('.day__month_btn').innerText()
Run Code Online (Sandbox Code Playgroud)

在此示例中,我正在读取日期选择器元素的月份值,并希望选择下个月。然后等待,直到月份发生变化。

要更改月份,我可以单击下个月图标

page.querySelector('.next').click()
Run Code Online (Sandbox Code Playgroud)

我现在想等到点击被接受。

一种 hacky 的方法是等待,即重复获取该值,直到它发生变化

while True:
    if page.querySelector('.day__month_btn').innerText() != month:
        break
    time.sleep(0.2)  
Run Code Online (Sandbox Code Playgroud)

在现实世界中,我还需要检查超时。

有一个更好的方法吗?

python webautomation playwright playwright-python

4
推荐指数
1
解决办法
7445
查看次数

调用await browser.close()时出错:(节点:4960)UnhandledPromiseRejectionWarning:page.goto:导航失败,因为页面已关闭

我的目标:

\n

在加载第一个页面(一个巨大的 html)时导航到第二个页面。

\n

当前状态:

\n

该脚本一直运行到最后,然后await browser.close()崩溃。

\n

剧本:

\n
const { chromium } = require(\'playwright\');\n\n(async () => {\n  const browser = await chromium.launch({ headless: false })\n  const page = await browser.newPage()\n\n  await page.setViewportSize({ width: 1200, height: 800 })\n\n  // asynchronous loading\n  page.goto(\'http://localhost:1234/index1.htm\')\n\n  // wait for the button that navigates to another page\n  await page.waitForSelector(\'#button1\');\n  \n  // button exists. Click it to navigate to index2.htm\n  await page.click(\'#button1\')\n  \n  // await the #first_span element exists in index2.htm …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js promise playwright

4
推荐指数
1
解决办法
7175
查看次数

无法捕获 playwright 中的 response.json()

我正在尝试使用 playwright 捕获 json 响应。我不断收到待处理的 Promise。但是,在 headless:false 模式下,我可以看到数据正在被接收并填充在浏览器上。我刚刚开始玩Playwright,对《Promise》也不是很熟悉。

我尝试过的如下:

(async () => {
        let browser = await firefox.launch({headless: true, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'});
        let page = await browser.newPage();
        page.waitForResponse(async(response) => {
            if (response.url().includes('/abcd') && response.status() == 200) {
                let resp = await response.json();
                console.log(resp);
            }
        });
        await page.goto('https://myurl.com', {waitUntil: 'networkidle', timeout: 30000});
        await page.waitForTimeout(20000);
        await browser.close();
})
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我尝试过增加超时时间。没有帮助。

javascript webautomation playwright

4
推荐指数
1
解决办法
9533
查看次数