我想验证一个可以在一分钟后更新的函数,并且我在代码中设置了一些睡眠,但我的默认超时值是 15000 毫秒,我的代码有睡眠 60000 毫秒,所以它返回此错误:
thrown: "Exceeded timeout of 15000 ms for a test.
Use jest.setTimeout(newTimeout) to increase the timeout value,
if this is a long-running test."
Run Code Online (Sandbox Code Playgroud)
我的代码在这里:
it('shows that timeline can get updated after one minute', async () => {
await selectTimeForTimeLine.selectTime('Last 5 minutes');
await page.waitForTimeout(3000);
const defaultTime = await alarmTimeLine.xAxisValues();
await page.evaluate(() => {
return new Promise((resolve) => setTimeout(resolve, 60000));
});
const correntTime = await alarmTimeLine.xAxisValues();
expect(defaultTime).not.toEqual(correntTime);
});
Run Code Online (Sandbox Code Playgroud)
我应该放在哪里jest.setTimeOut()
?我想将超出的超时值增加到 70000 毫秒,以确保我的代码运行良好。
我正在测试一个包含徽标的网站,并且我想确保该徽标不会出现在某些页面上。
如何断言某个元素不存在?我检查了剧作家断言文档,但它只有检查确实存在的事情的示例。
async assertNoLog(): Promise<boolean> {
await this.page.locator('div#page-id'); // now the page has loaded
// How do I check if logo is on page without throwing an error if it is missing
}
Run Code Online (Sandbox Code Playgroud)
我不知道在这里写什么来断言页面上的任何地方都找不到我的元素。
如何检索 Playwright 中页面的当前 URL?类似于browser.getCurrentUrl()
Protractor 中的东西吗?
我正在尝试一些非常简单的事情:
如此简单,但我无法让它发挥作用。这是代码:
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) 我正在尝试在测试中获取元素的属性。我的测试如下所示:
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
。这是因为_attribute
是null
。但是,我不明白为什么。field
是一个Locator
. 但是,我似乎无法获取该属性或其值。我究竟做错了什么?
我正在运行一个名为“创建管理”的测试。测试会先创建admin,然后检查admin是否创建成功。
在脚本中,我有一部分代码我想等待 3 秒再继续,因为每当单击提交按钮时,网站在导航完成后需要花费 3 秒来刷新管理表(用户信息列表) 。有关更多信息,此刷新不是导航,因此我的“waitForNavigation()”不起作用。
因此,流程将是这样的:“填写表单”>“点击提交按钮”>“等待导航”>“重新加载用户表(3s)”。
如果我不等待3秒表刷新,测试将抛出错误,因为在表中找不到注册用户(我有其他脚本来查找用户)。
我已经安装了 Playwright vscode 扩展,但是当我进入测试区域时,我收到一条“在此工作区中未找到测试”消息。但当我$> playwright test
在 CLI 上运行时,它就像一个魅力。奇怪的是,前段时间它在 VSCode 中运行得很好。
当我单击重新加载图标时,我得到
但几秒钟后我又回到了开始的地方。当我单击蓝色按钮时,我会转到扩展列表
我不太确定我应该在这里安装什么。而且,它在过去已经起作用了。
这是我为 Playwright 安装的扩展:
有什么建议吗?我的 VSCode 中发生了什么?
我正在考虑使用 Playwright 编写一些 E2E 测试。我可以看到该库允许针对 Chromium、Firefox 和 Webkit 运行测试。我的理解是 Webkit 是 Safari 的底层引擎,而 Chromium 是 Chrome(和其他浏览器)的基础。
在针对 Webkit/Chromium 进行测试时,它与针对使用底层引擎的面向用户的浏览器进行测试有多接近?我想用户在使用 Safari 时会遇到一些怪癖,并且在 Webkit 上运行测试时不会被发现。
谢谢
我想使用铬而不是铬。我可以通过提供可执行路径在 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)
这是我第一次使用 playwright,我不知道如何等待请求并验证响应。我已经使用 cypress 很长时间了,管理网络请求非常容易。例如,我需要在单击按钮后验证响应,这就是我使用 cypress 执行此操作的方法:
cy.server()
cy.route('POST', '/api/contacts').as('newContact')
cy.get('.btn').click()
cy.wait('@newContact').then((response) => {
expect(response.status).to.eq(400)
expect(response.responseBody.data.name).to.eq('abcde')
})
Run Code Online (Sandbox Code Playgroud)
这就是我尝试对剧作家做同样的事情的方式,但它会验证GET
在单击“保存”按钮之前很久就发送的请求。我不知道如何正确管理这个请求,这对我的测试套件来说是一个阻碍:
await contacts.clickSaveBtn()
await page.waitForResponse((resp) => {
resp.url().includes('/api/contacts')
expect(resp.status()).toBe(400)
})
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议将非常感激
playwright ×10
javascript ×7
node.js ×2
ava ×1
jestjs ×1
safari ×1
testing ×1
typescript ×1
webkit ×1