小编Ale*_*kin的帖子

Testcafe:如何在 4xx 或 5xx 响应中出错?

我正在开发一个对外部资源进行大量调用的遗留应用程序。我正在尝试重构这个应用程序,并且我编写了testcafe测试来帮助我在犯错时通知我。我没有用 运行我的测试--skip-js-errors,但是当我收到 404 错误并且控制台打印出来时:

在此处输入图片说明

测试不会停止。我希望像这样的错误成为我被告知的事情。 如何使 4xx 和 5xx 网络响应失败 testcafe? 如果这很重要,我将使用 angular 1.2。如果可以,我会更改所有远程调用以在 4xx 或 5xx 上抛出异常,但这是我不理解的遗留代码,我确信这样做会破坏功能。

testing automated-tests node.js angularjs testcafe

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

在发出获取请求后,编写 Testcafe 测试来断言加载微调器是可见的

我有以下场景:

  • 加载页面
  • 期望微调器是隐藏的
  • 输入用户名点击搜索
  • 期待微调显示
  • 延迟几秒钟后,预计微调器会隐藏
  • 断言显示正确的用户详细信息

这是工作演示 在此处输入图片说明

我在我的测试规范中模拟了网络请求,但我无法理解在单击搜索按钮后如何断言微调器可见

这是我的测试规范:

    import {Selector, RequestMock} from "testcafe";
   import mockUser from "../mocks/mockUser.json";

var apiMocks = RequestMock()
  .onRequestTo(/\/api\/users/)
  .respond(mockUser, 200, {
    'access-control-allow-credentials': "*",
    'access-control-allow-origin': "*"
  })
fixture `When a user is searched`
  .page(`http://localhost:3000/`)
  .requestHooks(apiMocks);

test("Should fetch user details", async t => {
  const spinnerEl = Selector("[data-test-id='spinner']");

  await t.expect(spinnerEl.exists).notOk();

  await t
    .typeText("[data-test-id='txt-search']", "foo")
    .click("[data-test-id='btn-search']");
   // This line does not work
  // await t.expect(spinnerEl.exists).ok();
  await t.expect(Selector("[data-test-id='username']").innerText).eql("Foo Bar");
  await t.expect(Selector("[data-test-id='userid']").innerText).eql("foo");
})
Run Code Online (Sandbox Code Playgroud)

我是 TestCafe 的新手,有人可以帮我解决这个问题。

谢谢!

testing automated-tests ui-testing ui-automation testcafe

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

是否可以在不同的前提条件下运行相同的testcafe夹具

有人可以使用testcafe(fixtureEach)找到最合适的方法来运行具有不同前提条件的相同夹具的最佳方法吗?

鉴于我有以下固定装置:

  fixture('[Test] My Page')
  .meta({ env: 'aat', mobile: 'true', author: 'me' })
  .beforeEach(async t => {
    await t.navigateTo(myPage.url)
    await waitForReact(10000)
  })

test('Page should load all data successfully', async t => {
  const { Query: queries } = await t.ctx.graphQLTools.mockManagementClient.getCalls()
  for (const q of Object.keys(queries)) {
    for (const { args, context } of Object.keys(queries[q])) {
      await t.expect(queries[q][args]).typeOf('undefined')
      await t.expect(queries[q][context]).typeOf('undefined')
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,我需要多次运行此测试:

  1. 我是匿名用户
  2. 我是管理员用户
  3. 我是默认用户

我已经尝试了以下代码,但是当我在夹具中进行多个测试需要检查时,它看起来很麻烦,并且会带来复杂性(摘自https://testcafe-discuss.devexpress.com/t/multiple-用不同的数据执行一次测试/ 219):

const a = ['anonymous', 'logged In']
for (const …
Run Code Online (Sandbox Code Playgroud)

testing automated-tests web-testing e2e-testing testcafe

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

TestCafe从元素获取文本

我正在尝试从Chrome上的模式获取文本。使用控制台,我可以获取内部文本,如下所示:

document.querySelector('.my-form > a').innerText
// returns http://a-url.com
Run Code Online (Sandbox Code Playgroud)

现在,在测试中,我可以使用

const myText = Selector('.my-form > a').innerText;
await t
  .expect(myText).contains('url');
Run Code Online (Sandbox Code Playgroud)

我什至可以点击该网址

await t.click(myText);
Run Code Online (Sandbox Code Playgroud)

但是例如,我不能将内部文本放入变量中。我尝试从这篇文章中使用ClientFunction

const getUrl = ClientFunction(() => document.querySelector('.my-form > a').innerText);

test('My Test', async t => {
const text = await getUrl();
console.log(text);
});

// this results in 
// TypeError: Cannot read property 'innerText' of null
Run Code Online (Sandbox Code Playgroud)

并尝试使用普通选择器,如本文所建议

const text = Selector('.my-form > a').innerText;
const inner = await text.textContent;
console.log(inner);

// prints: undefined
Run Code Online (Sandbox Code Playgroud)

如何从元素中提取文本?我了解t.selectText在这种情况下会受到限制,对吧?

javascript automated-tests web-testing e2e-testing testcafe

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

如何使用节流连接运行 TestCafe 测试?

如果文件上传时间超过 1 分钟,我需要检查功能。

为了通过手动测试来检查它,我使用 Chrome 开发工具来设置节流“慢 3G”。但我不知道如何使用 TestCafe 做到这一点。

testing automated-tests web-testing e2e-testing testcafe

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

TestCafe - 浏览器在测试之间总是以干净的状态启动。如何覆盖它以便浏览器记住缓存、用户设置和存储

测试之间的浏览器始终以干净的状态打开。登录在我的应用程序中被记住,因为身份验证仍然存在,但由于浏览器始终以干净的状态打开,我必须在所有夹具的 Before 挂钩中执行登录。有什么方法可以打开浏览器以便记住用户设置、缓存、本地和会话存储吗?

browser automated-tests web-testing e2e-testing testcafe

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

夹具或测试的隔离模式

是否可以在隔离模式下运行某些测试,而在不使用该模式的情况下运行其他测试?例如,我们有一些轻量级测试,我们不需要进行3次尝试,但对于其他测试则可能是必要的

testing automated-tests web-testing e2e-testing testcafe

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

TestCafe:测试页面 在新标签页中打开 PDF

我正在测试的 Web 应用程序的一部分是单击一个按钮,这通常会在新选项卡中打开一个 PDF。这使用户能够在应用程序中继续前进。PDF 可以忽略。

目前,我的策略是单击按钮,然后使用 ClientFunction 导航回去。TestCafe在点击按钮时成功打开PDF,但是在同一个选项卡中打开,然后测试卡住了。向后导航会更改 URL,但仍会显示 PDF。


    const goBack = ClientFunction(() => window.history.back())

    await this.t.click(this.button)
    await this.t.wait(10000)

    await goBack()
Run Code Online (Sandbox Code Playgroud)

TestCafe 目前是否能够绕过这个问题,因为我实际上不需要对 PDF 做任何事情?

pdf testing automation e2e-testing testcafe

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

TestCafe 是否有设置默认浏览器窗口大小的方法?

阅读CLI Docs,似乎没有办法设置默认浏览器窗口大小。有没有办法做到这一点,以便每个测试或每个测试夹具不必?

我应该指出,resizeWindow在每个测试中添加一个调用,甚至每个测试夹具一次都不是跨多个夹具的可扩展解决方案,因此“正确”的解决方案应该/将涉及某种配置,因此只需要设置一次。

browser testing automation e2e-testing testcafe

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

如何使用 TestCafe 和 Yaml 将屏幕截图和视频保存为 Azure Build Pipeline 中的附件?

我正在尝试在 Azure Devops 中创建一个构建管道

  1. 运行在 TestCafe Studio 中创建的测试
  2. 保存错误屏幕截图,并保存每次测试的视频
  3. 保存测试运行的视频
  4. 将测试结果发布到测试运行
  5. 将屏幕截图和视频作为附件发布到构建管道和生成的测试运行中的其余结果

对于我的一生,我和我的团队都无法弄清楚如何做到这一点 - 我们目前处于保存测试运行,并将视频和屏幕截图保存为工件的状态,但它们都没有附加到测试结果中构建或测试运行 - 这是我们的 YAML 文件之一的示例

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://learn.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: …
Run Code Online (Sandbox Code Playgroud)

azure azure-devops azure-pipelines testcafe

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