我需要从一个页面获取 JSSESSIONID cookie 并将其传递到另一个页面。但是当我尝试与剧作家一起获取 cookie 时,我得到了一个空数组。有任何想法吗?
const browser = await playwright[browserType].launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto(link);
const elementHandle = await page.$('#putfocushere');
await elementHandle.type(searchNumber);
console.log(await context.cookies(page.url()))
Run Code Online (Sandbox Code Playgroud) 我已经使用木偶师有一段时间了,但决定转型为剧作家。在 puppeteer 中,有一个插件puppeteer-extra-stealth可以隐藏无头浏览器,并且网站无法检测无头模式。剧作家有类似的事情吗?
我正在尝试使用 Playwright 自动下载 PDF 文件,我的代码与 Selenium 一起使用,但 Playwright 中的一些功能引起了我的注意。真正的问题是文档
没有帮助。当我点击下载时,我得到:

而且我无法更改下载的目录,当浏览器/上下文关闭时它也会删除“文件”。使用 Playwright 我可以实现很好的下载自动化吗?
代码:
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(accept_downloads=True)
# Open new page
page = context.new_page()
# Go to http://xcal1.vodafone.co.uk/
page.goto("http://xcal1.vodafone.co.uk/")
# Click text=Extra Small File 5 MB A high quality 5 minute MP3 music file 30secs @ 2 Mbps 10s >> img
with page.expect_download() as download_info:
page.click("text=Extra Small File 5 MB A high quality 5 minute MP3 music file 30secs @ 2 Mbps 10s >> …Run Code Online (Sandbox Code Playgroud) 是否可以在一个浏览器窗口中为剧作家/测试运行多个测试?
目前它将点击 browser.close(); 每次测试后,即使他们在同一页面上进行测试,这也会在测试上花费大量额外时间。
test.beforeAll(async ({ browser }) => {
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
});
test('nav test', async ({ page }) => {
const name = await page.innerText('.navbar__title');
expect(name).toBe('Playwright');
});
test('header test', async ({ page }) => {
const name = await page.innerText('.navbar__header');
expect(name).toBe('Playwright');
});
Run Code Online (Sandbox Code Playgroud) 我希望使用 Playwright 来测试网页。
我正在使用的系统有 4 个不同的环境,我们需要对其进行部署,例如测试 url 可能是
www.test1.com
www.test2.com
www.test3.com
www.test4.com
第一个问题是如何针对不同的环境?在我的剧作家配置中,我有一个 baseUrl 但我需要覆盖它。
此外,每个环境都有不同的登录凭据,我如何创建和覆盖这些作为每个环境的参数?
我想使用 Playwright 打开一个网站,但不希望被自动重定向。
在其他一些 Web 客户端中,它们具有参数链接follow=False以在重定向后自动禁用。但我在剧作家上找不到。
async def run(playwright):
chromium = playwright.chromium
browser = await chromium.launch()
context = await browser.new_context()
page = await context.new_page()
def handle_response(response):
print(f'status: {response.status} {response.url}')
page.on('response', handle_response)
await page.goto("https://google.com")
await browser.close()
Run Code Online (Sandbox Code Playgroud)
这是示例代码,我们知道 google.com 会响应 301 并将重定向到www.google.com。是否可以在收到 301 后停止该过程,这样我就不需要继续处理www.google.com以及此后的所有响应?
从请求文档中,我得到了Page.on('response')当/如果收到请求的响应状态和标头时发出的信息。
但是当Page on('response')回调后如何停止Request呢?我看到其他一些类似的问题,使用 Route.abort() 或 Route.fulfill(),但我仍然没有得到我的案例的答案。
感谢您的帮助。
我正在使用剧作家nodejs。我自己编写了一个动态选择器函数来选择数据表上的页码按钮。
pageNumberButton(page, table_id, page_number) {
page.locator(`[aria-controls=${table_id}]`, {hasText: page_number});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
pageNumberButton(page, table_id, page_number) {
page.locator(`[aria-controls=${table_id}] text=${page_number}`);
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法使其完全匹配。
假设我的数据表有 13 页:
我希望单击第 1 页。因此我发出以下命令:await pageNumberButton(page, "resultsTable", "1").click();
但我收到严格模式错误,因为有两个结果:1 和 13。
动态创建这个小选择器以便我可以对按钮进行精确匹配的最佳或好的方法是什么?
我需要拦截网络请求并将其响应主体保存到变量中,这样我就可以使用 UI 上显示的值执行断言,但是当我尝试访问应该包含已保存响应主体的变量时,我会收到 [object Object]一个有效的机构。
JSON.stringify 也不能解决问题,因为我的变量变成了{"_type":"Page","_guid":"page@"}而不是实际的响应。
这是代码:
const resp = await page.on('response', async response => {
if (response.url().includes('/some_url/') && response.status() === 200) {
console.log('BODY() ' + (await response.body())); //logs valid JSON response body
return await response.body();
}
})
console.log('RESPONSE' + resp); //logs RESPONSE[object Object]
Run Code Online (Sandbox Code Playgroud) javascript automated-tests webautomation e2e-testing playwright
我在与剧作家一起编码测试自动化时遇到了问题。运行测试时,test.spec.ts 出现以下错误:
错误:找不到模块“@common/common” 代码:“MODULE_NOT_FOUND”
如何解决这个问题呢?
下面有代码
测试规格
import { chromium, ChromiumBrowser, Page } from "playwright";
import { test, expect, PlaywrightTestConfig } from "@playwright/test";
import Common from "@common/common";
test.beforeAll(async ({ page }) => {
});
test.describe('Go test', () => {
test('Test1', async ({ page }) => {
console.log("1111111111");
});
})
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "type-sanity",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"test": "npx playwright test"
},
"author": "",
"license": "ISC",
"dependencies": {
"@types/randomstring": "^1.1.7",
"playwright": …Run Code Online (Sandbox Code Playgroud) 几天来我一直在尝试使用 xvfb 在 AWS Lambda 上运行 Playwright。我能够构建一些在本地运行的 Docker 镜像变体,但推送到 AWS 时总是遇到错误。
Dockerfile:
FROM mcr.microsoft.com/playwright/python:v1.24.0-focal
COPY index.py /
COPY start.sh /
RUN apt install xvfb
RUN chmod 755 /start.sh
CMD ["/bin/bash", "./start.sh"]
Run Code Online (Sandbox Code Playgroud)
启动文件
FROM mcr.microsoft.com/playwright/python:v1.24.0-focal
COPY index.py /
COPY start.sh /
RUN apt install xvfb
RUN chmod 755 /start.sh
CMD ["/bin/bash", "./start.sh"]
Run Code Online (Sandbox Code Playgroud)
索引.py
#!/bin/bash
xvfb-run --auto-servernum --server-num 1 --server-args "-screen 0, 1920x1080x24" python index.py
Run Code Online (Sandbox Code Playgroud)
看起来由于某些与权限相关的原因,浏览器无法启动 - 有什么想法可能导致它以及如何解决它吗?
2022-08-30T09:50:28.053+02:00 Traceback (most recent call last):
2022-08-30T09:50:28.053+02:00 File "index.py", line 8, in lambda_handler
2022-08-30T09:50:28.053+02:00 …Run Code Online (Sandbox Code Playgroud) playwright ×10
node.js ×3
python ×2
aws-lambda ×1
docker ×1
e2e-testing ×1
javascript ×1
puppeteer ×1
typescript ×1
xvfb ×1