标签: playwright

如何增加笑话中的测试超时值?

我想验证一个可以在一分钟后更新的函数,并且我在代码中设置了一些睡眠,但我的默认超时值是 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 毫秒,以确保我的代码运行良好。

javascript jestjs playwright

40
推荐指数
3
解决办法
5万
查看次数

我如何断言某个元素不在剧作家的页面上?

我正在测试一个包含徽标的网站,并且我想确保该徽标不会出现在某些页面上。

如何断言某个元素不存在?我检查了剧作家断言文档,但它只有检查确实存在的事情的示例。

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)

我不知道在这里写什么来断言页面上的任何地方都找不到我的元素。

typescript playwright

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

使用 Playwright Automation 工具获取当前页面 url?

如何检索 Playwright 中页面的当前 URL?类似于browser.getCurrentUrl()Protractor 中的东西吗?

javascript playwright

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

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

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

  • 导航至 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万
查看次数

如何让测试脚本暂停3秒再继续运行?剧作家

我正在运行一个名为“创建管理”的测试。测试会先创建admin,然后检查admin是否创建成功。

在脚本中,我有一部分代码我想等待 3 秒再继续,因为每当单击提交按钮时,网站在导航完成后需要花费 3 秒来刷新管理表(用户信息列表) 。有关更多信息,此刷新不是导航,因此我的“waitForNavigation()”不起作用。

因此,流程将是这样的:“填写表单”>“点击提交按钮”>“等待导航”>“重新加载用户表(3s)”。

如果我不等待3秒表刷新,测试将抛出错误,因为在表中找不到注册用户(我有其他脚本来查找用户)。

这是单击“保存按钮”时导航的样子: 在此输入图像描述

之后,该表需要 3 秒刷新,如下所示: 在此输入图像描述

这就是“创建”函数的样子: 在此输入图像描述

javascript testing functional-testing ava playwright

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

Playwright VSCode 给出“未找到测试”消息

我已经安装了 Playwright vscode 扩展,但是当我进入测试区域时,我收到一条“在此工作区中未找到测试”消息。但当我$> playwright test在 CLI 上运行时,它就像一个魅力。奇怪的是,前段时间它在 VSCode 中运行得很好。

在此输入图像描述

当我单击重新加载图标时,我得到

在此输入图像描述

但几秒钟后我又回到了开始的地方。当我单击蓝色按钮时,我会转到扩展列表

在此输入图像描述

我不太确定我应该在这里安装什么。而且,它在过去已经起作用了。

这是我为 Playwright 安装的扩展:

在此输入图像描述

有什么建议吗?我的 VSCode 中发生了什么?

visual-studio-code playwright playwright-test

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

在 Safari 和 Webkit 上进行测试有什么区别?

我正在考虑使用 Playwright 编写一些 E2E 测试。我可以看到该库允许针对 Chromium、Firefox 和 Webkit 运行测试。我的理解是 Webkit 是 Safari 的底层引擎,而 Chromium 是 Chrome(和其他浏览器)的基础。

在针对 Webkit/Chromium 进行测试时,它与针对使用底层引擎的面向用户的浏览器进行测试有多接近?我想用户在使用 Safari 时会遇到一些怪癖,并且在 Webkit 上运行测试时不会被发现。

谢谢

safari webkit cross-browser playwright

18
推荐指数
1
解决办法
3088
查看次数

如何在 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万
查看次数

如何使用剧作家等待请求并验证响应?

这是我第一次使用 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)

任何帮助或建议将非常感激

javascript automated-tests playwright

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