E2E 测试套件在登录 google 帐户时卡住
E2E test suite get stuck when logging in to a google account
在我的 Angular5 应用程序中,我在量角器上有一个 E2E 测试套件 运行,其中包括登录 google 帐户。最近,输入密码后,Chrome 被重定向到 https://accounts.google.de/accounts/SetSID
,显示空白屏幕,没有其他任何反应。最终,套件超时。
当我手动输入用户名和密码时(在 E2E 环境之外),浏览器也被重定向到此 URL 一秒钟,但随后立即导航到我得到的 https://accounts.google.com/signin/oauth/consent
允许或拒绝访问我的帐户。
看来我需要为 E2E 环境修复一些 Chrome 设置,但是哪些设置以及如何修复?
编辑: 页面本身是空白的,但 HTML 主体包含一个脚本标签:
<script nonce>
location.replace('https:\/\/accounts.google.com\/signin\/oauth\/consent?authuser\x3d0\x26part\x3dAJi8hAMUl_5gA4GrIozXAyYpERMmUqdSAaQS-oLzjkegEK6wmwghwqKNYFd8jKuz3WjirmqMLgnvk9FNR-hVvO0bnWthA-dCrOVWyLKXl_GYL_xVerzhfMSNGPn7wziNYoQ5nKVyaWtH67YUR-O7gwmSW0dukrSjIUpg954e1KcAiMfrCf4dKRBFd8ENTdy4U5KHphQjWKPKnqsXf0hCUob6DFaLiiyUrDq9BaBkOFdnafHz0hP99JFGDa1Anul9oWYonB8ce4z485rPHpuGYBVmioRauqBXWQ1q62oNgDuo8qhFDsGUyxUyywgKQ-veZO05WHJcmmtbL_q0bmrPHD3yNl91vwl0uiF5NdRS_kZ6oKY_bxD562yawqNQdZ1nVfAGWmaYXyXjFd6EX0He351ugpyyezOZ0zBb-5BKv7IXWu2DiD3bd_E\x26as\x3dOnTvuJ0NpqEd3bqD8MVs-g\x26auth\x3dAwanw8ZCzvMxUzucWfpIL9mB__vh3DFsXzQGdSuyMdWciXu7MY6ww1lukyPl3EJ0B4FX5A.#');
</script>
实际上可以从脚本中提取回调 URL,但需要一些干预,因为 url 字符串会转义特殊字符:
const returnScript = element(by.xpath('//body/script'));
browser.wait(protractor.ExpectedConditions.presenceOf(returnScript), 10000)
.then(() => {
returnScript.getAttribute('innerHTML')
.then(text => {
let callbackUrl = text
.match(/\'.*\'/)[0]
.slice(1, -1);
callbackUrl = callbackUrl.replace(/\\//g, '/');
callbackUrl = callbackUrl.replace(/\x3d/g, '=');
callbackUrl = callbackUrl.replace(/\x26/g, '&');
// This was necessary for some reason, I assume you need to replace .de with your country domain
callbackUrl = callbackUrl.replace(/.com/, '.de');
console.log(callbackUrl);
browser.driver.get(callbackUrl);
})
})
编辑: 当我昨天启动同一个套件时,问题就消失了。上面的代码不是必需的。
在我的 Angular5 应用程序中,我在量角器上有一个 E2E 测试套件 运行,其中包括登录 google 帐户。最近,输入密码后,Chrome 被重定向到 https://accounts.google.de/accounts/SetSID
,显示空白屏幕,没有其他任何反应。最终,套件超时。
当我手动输入用户名和密码时(在 E2E 环境之外),浏览器也被重定向到此 URL 一秒钟,但随后立即导航到我得到的 https://accounts.google.com/signin/oauth/consent
允许或拒绝访问我的帐户。
看来我需要为 E2E 环境修复一些 Chrome 设置,但是哪些设置以及如何修复?
编辑: 页面本身是空白的,但 HTML 主体包含一个脚本标签:
<script nonce>
location.replace('https:\/\/accounts.google.com\/signin\/oauth\/consent?authuser\x3d0\x26part\x3dAJi8hAMUl_5gA4GrIozXAyYpERMmUqdSAaQS-oLzjkegEK6wmwghwqKNYFd8jKuz3WjirmqMLgnvk9FNR-hVvO0bnWthA-dCrOVWyLKXl_GYL_xVerzhfMSNGPn7wziNYoQ5nKVyaWtH67YUR-O7gwmSW0dukrSjIUpg954e1KcAiMfrCf4dKRBFd8ENTdy4U5KHphQjWKPKnqsXf0hCUob6DFaLiiyUrDq9BaBkOFdnafHz0hP99JFGDa1Anul9oWYonB8ce4z485rPHpuGYBVmioRauqBXWQ1q62oNgDuo8qhFDsGUyxUyywgKQ-veZO05WHJcmmtbL_q0bmrPHD3yNl91vwl0uiF5NdRS_kZ6oKY_bxD562yawqNQdZ1nVfAGWmaYXyXjFd6EX0He351ugpyyezOZ0zBb-5BKv7IXWu2DiD3bd_E\x26as\x3dOnTvuJ0NpqEd3bqD8MVs-g\x26auth\x3dAwanw8ZCzvMxUzucWfpIL9mB__vh3DFsXzQGdSuyMdWciXu7MY6ww1lukyPl3EJ0B4FX5A.#');
</script>
实际上可以从脚本中提取回调 URL,但需要一些干预,因为 url 字符串会转义特殊字符:
const returnScript = element(by.xpath('//body/script'));
browser.wait(protractor.ExpectedConditions.presenceOf(returnScript), 10000)
.then(() => {
returnScript.getAttribute('innerHTML')
.then(text => {
let callbackUrl = text
.match(/\'.*\'/)[0]
.slice(1, -1);
callbackUrl = callbackUrl.replace(/\\//g, '/');
callbackUrl = callbackUrl.replace(/\x3d/g, '=');
callbackUrl = callbackUrl.replace(/\x26/g, '&');
// This was necessary for some reason, I assume you need to replace .de with your country domain
callbackUrl = callbackUrl.replace(/.com/, '.de');
console.log(callbackUrl);
browser.driver.get(callbackUrl);
})
})
编辑: 当我昨天启动同一个套件时,问题就消失了。上面的代码不是必需的。