Cypress.io是否支持测试现代SharePoint webparts?相关问题咨询
Cypress完全可以胜任SharePoint Web Parts的测试工作,覆盖你提到的开箱即用Web Parts、官方提供的Web Parts两类测试对象不存在功能性阻碍。
网传“Cypress不支持Web Parts测试”的说法均来自Cypress 10版本之前的历史限制,目前这些问题都已在正式版修复:
- 旧版本Cypress无法直接穿透SharePoint Web Parts使用的沙箱iframe,现在可以通过自定义
cy.iframe()命令直接访问iframe内的DOM元素,不需要额外修改浏览器安全配置 - 旧版本Cypress默认不识别Web Parts渲染生成的Shadow DOM节点,现在只需要在全局配置中开启
includeShadowDom: true,即可像操作普通DOM一样定位Web Parts内的控件
不要走UI输入账号密码的登录流程,这类流程会被MFA、AAD条件访问、重定向策略拦截,稳定性极差,推荐用令牌注入的方案实现免登:
- 在测试租户对应的Azure AD中注册测试应用,授予目标SharePoint站点的对应读写权限,生成客户端ID、租户ID、客户端密钥三个认证参数
- 在Cypress配置文件的
setupNodeEvents节点中新增自定义任务,测试启动前在Node层调用身份认证接口获取SharePoint的认证Cookie,核心配置参考:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { on("task", { async getSharePointAuthCookie() { // 基于已有的客户端ID、租户ID、客户端密钥请求FedAuth、rtFa两个认证Cookie return authCookies; } }); }, // 适配SharePoint Web Parts的基础配置 includeShadowDom: true, experimentalSessionAndOrigin: true, defaultCommandTimeout: 10000 } });
- 在测试用例的全局前置钩子中调用上述任务,拿到认证Cookie后通过
cy.setCookie()写入测试浏览器上下文,再访问目标SharePoint页面即可直接跳过登录流程,不会跳转到AAD登录页。
Web Parts测试注意事项
定位官方Web Parts内的元素时,不要使用动态生成的class、id作为选择器,SharePoint更新时会随机替换这类属性值。优先使用元素上预置的
data-automation-id属性做定位,官方所有开箱即用Web Parts都预留了这个测试专用属性,选择器稳定性远高于其他定位方式。
内容的提问来源于stack exchange,提问作者AME
相关产品推荐
相关产品推荐

