我正在开发一个对外部资源进行大量调用的遗留应用程序。我正在尝试重构这个应用程序,并且我编写了testcafe测试来帮助我在犯错时通知我。我没有用 运行我的测试--skip-js-errors,但是当我收到 404 错误并且控制台打印出来时:
测试不会停止。我希望像这样的错误成为我被告知的事情。 如何使 4xx 和 5xx 网络响应失败 testcafe? 如果这很重要,我将使用 angular 1.2。如果可以,我会更改所有远程调用以在 4xx 或 5xx 上抛出异常,但这是我不理解的遗留代码,我确信这样做会破坏功能。
我有以下场景:
我在我的测试规范中模拟了网络请求,但我无法理解在单击搜索按钮后如何断言微调器可见
这是我的测试规范:
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 的新手,有人可以帮我解决这个问题。
谢谢!
有人可以使用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)
在上面的代码示例中,我需要多次运行此测试:
我已经尝试了以下代码,但是当我在夹具中进行多个测试需要检查时,它看起来很麻烦,并且会带来复杂性(摘自https://testcafe-discuss.devexpress.com/t/multiple-用不同的数据执行一次测试/ 219):
const a = ['anonymous', 'logged In']
for (const …Run Code Online (Sandbox Code Playgroud) 我正在尝试从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在这种情况下会受到限制,对吧?
如果文件上传时间超过 1 分钟,我需要检查功能。
为了通过手动测试来检查它,我使用 Chrome 开发工具来设置节流“慢 3G”。但我不知道如何使用 TestCafe 做到这一点。
测试之间的浏览器始终以干净的状态打开。登录在我的应用程序中被记住,因为身份验证仍然存在,但由于浏览器始终以干净的状态打开,我必须在所有夹具的 Before 挂钩中执行登录。有什么方法可以打开浏览器以便记住用户设置、缓存、本地和会话存储吗?
是否可以在隔离模式下运行某些测试,而在不使用该模式的情况下运行其他测试?例如,我们有一些轻量级测试,我们不需要进行3次尝试,但对于其他测试则可能是必要的
我正在测试的 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 做任何事情?
阅读CLI Docs,似乎没有办法设置默认浏览器窗口大小。有没有办法做到这一点,以便每个测试或每个测试夹具不必?
我应该指出,resizeWindow在每个测试中添加一个调用,甚至每个测试夹具一次都不是跨多个夹具的可扩展解决方案,因此“正确”的解决方案应该/将涉及某种配置,因此只需要设置一次。
我正在尝试在 Azure Devops 中创建一个构建管道
对于我的一生,我和我的团队都无法弄清楚如何做到这一点 - 我们目前处于保存测试运行,并将视频和屏幕截图保存为工件的状态,但它们都没有附加到测试结果中构建或测试运行 - 这是我们的 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) testcafe ×10
e2e-testing ×7
testing ×7
web-testing ×5
automation ×2
browser ×2
angularjs ×1
azure ×1
azure-devops ×1
javascript ×1
node.js ×1
pdf ×1
ui-testing ×1