我正在尝试使用自定义 jasmine 报告器并获取 specDone 函数中所有失败规范的列表:
specDone: function(result) {
if(result.status == 'failed') {
failedExpectations.push(result.fullName);
console.log(failedExpectations);
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里failedExpectations将存储失败规范的完整列表,我需要afterLaunch在量角器配置文件的函数中访问它。但是由于配置文件在每次运行新规范时都会加载,它基本上会被覆盖,并且范围使得我无法在afterLaunch函数中访问它,这就是我调用 slack api 的地方。有没有办法实现这一目标?
这是我基于的内容:http : //jasmine.github.io/2.1/custom_reporter.html
我创建了一个设置路由的测试,尝试访问一个向路由发出 API 请求的页面,然后等待路由响应:
cy
.server()
.route('GET', '/api/testing')
.as('testing');
cy.visit('/index.html', { timeout: 60000 });
cy.wait('@testing', { timeout: 60000 });
Run Code Online (Sandbox Code Playgroud)
这只会等待responseTimeout30 秒的赛普拉斯全局默认值,然后 API 请求失败。
以下是赛普拉斯在控制台中记录的错误消息:
赛普拉斯尝试向此 url 发出 http 请求时出错: https://localhost:4200/api/testing
错误是:
ESOCKET超时
堆栈跟踪是:
错误:ClientRequest
处的ESOCKETTIMEDOUT 。(...\node_modules\cypress\dist\Cypress\resources\app\packages\server\node_modules\request\request.js:778:19)
在 Object.onceWrapper (events.js:314:30)
在 emitNone (events.js :105:13)
在 ClientRequest.emit (events.js:207:7)
在 TLSSocket.emitTimeout (_http_client.js:722:34)
在 Object.onceWrapper (events.js:314:30)
在 emitNone (events.js :105:13)
at TLSSocket.emit (events.js:207:7)
at TLSSocket.Socket._onTimeout (net.js:402:8) at ontimeout (timers.js:469:11)
at tryOnTimeout (timers.js) :304:5)
在 Timer.listOnTimeout (timers.js:264:5)
将 a 添加responseTimeout到 Cypress 的全局配置会增加超时,但为什么不是 …
拿这个夹具我想checkoutId根据before夹具钩子中API 调用的结果来设置,这样我就可以用它来设置我的测试页面
let checkoutId;
fixture`Check out as guest user`
.page`localhost:3001/checkout/start/${checkoutId}`
.before(async () => {
await checkout.getCheckoutId(sampleData.cart)
.then(id => (checkoutId = id));
});
// and here the rest of my tests based on the page
Run Code Online (Sandbox Code Playgroud)
我尝试了fixture hooks,共享变量,但我无法让它工作,请求页面时 checkoutId 未定义。
这种情况甚至可能吗?
testing automated-tests browser-automation e2e-testing testcafe
我正在使用 Cypress.io 为网站编写 E2E 测试。我想测试的功能之一是该站点正确检测到焦点丢失并显示(有角度的材料)对话框。我遇到的问题是我找不到一种可靠的方法来触发在测试环境中发生的窗口焦点丢失。我已经查看了 Cypress.io 中各种焦点和模糊事件的文档,但结果是空的。有谁知道是否可以从 Cypress.io 以编程方式触发窗口焦点丢失(模糊),如果可以,是否有我可以遵循的文档或示例?
这是发生这种情况的另一个例子^
我一直不明白为什么,但即使是最简单的木偶脚本也无法通过 goTo()
我有以下代码:
const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome-unstable', args: ["--proxy-server='direct://'", '--proxy-bypass-list=*', '--no-sandbox', '--disable-setuid-sandbox'] });
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36');
await page.setDefaultNavigationTimeout(0);
log('before nav');
await page.goto('http://www.google.com');
log('waiting nav');
await page.waitForNavigation({
waitUntil: 'networkidle0'
});
log('complete');
await browser.close();
Run Code Online (Sandbox Code Playgroud)
输出是:
$:# node lib/tests/nav.test.js
before nav
waiting nav
Run Code Online (Sandbox Code Playgroud)
它永远不会记录“完整”。我尝试过不使用代理旁路和代理服务器、打开和关闭无沙箱。我努力了networkidle2。它没有完成。我还尝试了各种不同的网站。我使用 Puppeteer 4.x 并使用节点 12.x 和 npm 6.x。
我研究了人们建议的 Promise 方法:
await Promise.All([ page.goto('http://www.google.com'), page.waitForNavigation() …Run Code Online (Sandbox Code Playgroud) 我尝试通过谷歌测试登录。并收到错误“赛普拉斯检测到页面加载时发生跨源错误”。这是m测试代码。在获取input[name="identifier"]元素之前我看到这个错误。
我的测试代码:
cy.visit(`https://app.develop.weeek.net/sign-in`);
cy.get('.socials__social')
.eq(0)
.click();
cy.get('input[name="identifier"]')
.type(Cypress.env.TEST_GOOGE_EMAIL)
.should('have.value', Cypress.env.TEST_GOOGE_EMAIL);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有方法来关闭 Chrome 的 CORS 请求检查。但没有人在工作。我通过命令打开cypress cypress open --config chromeWebSecurity=false。
我的cypress.json:
{
"chromeWebSecurity": false,
"viewportWidth": 1280,
"viewportHeight": 768
}
Run Code Online (Sandbox Code Playgroud)
为什么chromeWebSecurity不工作?如何关闭CORS检查?
当使用 Playwright、Puppeteer 和 Cypress 等工具执行端到端测试时,我相信所有这些工具(除了后者,如果我错了请原谅)只允许您使用每个浏览器的最新版本,即与每个版本捆绑在一起。
在这种情况下,我想知道运行端到端验收测试的真正好处是什么?这些测试只会针对更有限的场景验证功能,而不是确保您的应用程序仍然可以在 Chrome 70 上运行?
任何关于为什么只考虑最新的浏览器版本而忘记其余部分的见解都是一个好主意,通过使用 Playwright 而不是允许针对特定浏览器二进制文件进行定向测试的工具,例如,并使您的 E2E 测试结果如下:
PASS. Shopping-Cart (Modern)
FAIL. Shopping-Cart (chrome 70)
// Refactor
Run Code Online (Sandbox Code Playgroud)
代替
PASS. Shopping-Cart
// Yay! Release
Run Code Online (Sandbox Code Playgroud) 这是我的测试:
describe('settings page test', () =>{
it('tests navigation to settings page from login', () =>{
console.log(Cypress.config().baseUrl)
cy.visit(Cypress.config().baseurl)
Run Code Online (Sandbox Code Playgroud)
果然console.log(Cypress.config().baseUrl)包含了我的 baseUrl 设置的值。
{
"baseUrl": "https://superniftyurltho.com",
"env": {
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误
cy.visit() must be called with a url
or an options object containing a url as its 1st argumentLearn more
Run Code Online (Sandbox Code Playgroud)
有人知道会发生什么吗?
我flutter_driver之前用于集成测试,并且能够通过主机中的环境变量将参数插入到测试中,因为测试是从主机运行的。
对于另一个项目,我现在使用integration_test包。
测试不再在主机上运行,而是在目标上运行,因此当尝试通过环境变量传递参数时,测试不会获取它们。
我看到https://github.com/flutter/flutter/issues/76852我认为这可能有所帮助,但现在还有其他选择吗?
最近我发现了剧作家,看起来真的很好。我发现的问题通常是在黄瓜或小黄瓜语法的实现中。例如,在 cypress 中,这里的任务非常简单,看起来我需要使用其他测试运行程序然后使用剧作家。这是真的还是我只是缺少剧作家中黄瓜的一些库/配置?感谢您的任何建议。
e2e-testing ×10
cypress ×5
javascript ×4
angular ×2
playwright ×2
puppeteer ×2
automation ×1
base-url ×1
cucumber ×1
e2e ×1
flutter ×1
gherkin ×1
jasmine ×1
node.js ×1
protractor ×1
slack-api ×1
testcafe ×1
testing ×1
timeout ×1