当无法在 TestCafe 中解析第二个 URL 时断言 URL 重定向
Assert a URL redirection when second URL can not be resolved in TestCafe
我想断言下一个 URL 已解决。它是由 SendGrid 生成的 URL 并更改您在浏览器中搜索它的一个。问题是要访问第二个,您需要访问我们的 VPN。出于安全原因,我不想 运行 我们的 VPN 背后的测试,但我想断言来自 SendGrid 的重定向是否成功(我确切地知道解析后的 URL 会是什么样子)。
http://link.novemberfirst.com/ls/click?upn=xv2uBCiA-2BCPo8h2-2F2dXgSrKknBTgupgeogOdcsRpYXuG4cjYbJP1rkCCJ1zjXTj38aokCt-2BgUcrLMVeDJ0JrFznoH-2B4JC2bxKIUkkwWGvQPWZcW89yPA45cRI4YcN4kxIWOMamgXF7h0x-2BEumL4yC4cDPD6ib2Q-2FupSBTSJJvOohq9d3QApg3ktPsAr3s71dx8_f_jH2AkQSF6IE8lczSdagr9wUDFh2rSjc-2FDARefysokTdqaEnXNbSWSyYzYz4pIdy3KyzKI2WI84SAhUWA6Ysrwbu-2FEyv-2FLVj28UDJ96u9m0SfvfLMgVTTOypSpnfzJhz8HBp-2BErWzxw-2BHQBTWKJQCCsahFPt7FAp2yflzLocMroRH-2Blyqk-2Be61Q84U19yBAQ11beRliiLdNHnzJwd88-2FGbgPTIQoQi0xlVBQxVt08NyA-3D
使用 ClientFunction(() => document.location.href)
时会出现问题,您只会得到一个已成功解决的 URL,并且由于我没有连接到 VPN,最后一个 URL 不会可以显示,不能断言。
有没有办法在重定向完成后创建断言,即使我无法解析第二个 URL?
await t.navigateTo(URL);
const getLocation = ClientFunction(() => document.location.href);
await t.expect(getLocation()).contains('expected-url');
在这种情况下,预期的-url 将是:https://app-uat.novemberfirst.cloud.ec/#/public/reset-password/208100002/61849181@abc.com/F1PMDcC05gYhlqh82UDnl183/dan
找到解决方法。
基本上,在发出 http 请求时,您必须禁用任何重定向才能获得 url。
private async resolveRedirectLink(url) {
let redirectedURL;
try{
let response = await fetch(url, {redirect: 'manual'});
let link = await response.text();
let matches = link.match(/"(.*?)"/);
redirectedURL = matches[1];
}
catch(error){
redirectedURL = url;
console.warn('Error redirecting URL: ' + error.message );
}
return redirectedURL;
}
这是我的代码中使用的片段。
我想断言下一个 URL 已解决。它是由 SendGrid 生成的 URL 并更改您在浏览器中搜索它的一个。问题是要访问第二个,您需要访问我们的 VPN。出于安全原因,我不想 运行 我们的 VPN 背后的测试,但我想断言来自 SendGrid 的重定向是否成功(我确切地知道解析后的 URL 会是什么样子)。
http://link.novemberfirst.com/ls/click?upn=xv2uBCiA-2BCPo8h2-2F2dXgSrKknBTgupgeogOdcsRpYXuG4cjYbJP1rkCCJ1zjXTj38aokCt-2BgUcrLMVeDJ0JrFznoH-2B4JC2bxKIUkkwWGvQPWZcW89yPA45cRI4YcN4kxIWOMamgXF7h0x-2BEumL4yC4cDPD6ib2Q-2FupSBTSJJvOohq9d3QApg3ktPsAr3s71dx8_f_jH2AkQSF6IE8lczSdagr9wUDFh2rSjc-2FDARefysokTdqaEnXNbSWSyYzYz4pIdy3KyzKI2WI84SAhUWA6Ysrwbu-2FEyv-2FLVj28UDJ96u9m0SfvfLMgVTTOypSpnfzJhz8HBp-2BErWzxw-2BHQBTWKJQCCsahFPt7FAp2yflzLocMroRH-2Blyqk-2Be61Q84U19yBAQ11beRliiLdNHnzJwd88-2FGbgPTIQoQi0xlVBQxVt08NyA-3D
使用 ClientFunction(() => document.location.href)
时会出现问题,您只会得到一个已成功解决的 URL,并且由于我没有连接到 VPN,最后一个 URL 不会可以显示,不能断言。
有没有办法在重定向完成后创建断言,即使我无法解析第二个 URL?
await t.navigateTo(URL);
const getLocation = ClientFunction(() => document.location.href);
await t.expect(getLocation()).contains('expected-url');
在这种情况下,预期的-url 将是:https://app-uat.novemberfirst.cloud.ec/#/public/reset-password/208100002/61849181@abc.com/F1PMDcC05gYhlqh82UDnl183/dan
找到解决方法。
基本上,在发出 http 请求时,您必须禁用任何重定向才能获得 url。
private async resolveRedirectLink(url) {
let redirectedURL;
try{
let response = await fetch(url, {redirect: 'manual'});
let link = await response.text();
let matches = link.match(/"(.*?)"/);
redirectedURL = matches[1];
}
catch(error){
redirectedURL = url;
console.warn('Error redirecting URL: ' + error.message );
}
return redirectedURL;
}
这是我的代码中使用的片段。