使用Cypress测试WordPress插件:购物车添加商品后为空问题
排查WordPress购物车为空问题(Cypress测试+手动Cypress浏览器)
嘿,你遇到的这个情况很关键——连手动在Cypress配套的Chrome里操作都出问题,这说明大概率不是你的Cypress测试代码写错了,而是和Cypress的浏览器环境、WordPress的购物车存储机制,或者你的自定义插件逻辑有关。我给你梳理几个一步步排查的方向:
1. 先确认普通Chrome的行为是否正常
先别着急盯着Cypress,先在你日常用的普通Chrome浏览器里手动走一遍添加商品到购物车的流程:
- 如果普通Chrome里购物车能正常显示商品,那问题肯定出在Cypress的浏览器环境配置上;
- 如果普通Chrome里也空,那就是你的WordPress插件/主题(比如用了WooCommerce的话)本身的逻辑或者配置有问题。
2. 检查Cypress的Cookie/Session保留设置
Cypress默认会在每个测试用例开始时清空所有Cookie和LocalStorage,而WordPress的购物车通常依赖会话Cookie来保存数据。你可以试试保留相关的Cookie:
- 单个测试用例里临时保留:
beforeEach(() => { // 替换成你实际站点的Cookie名,通常是wordpress_logged_in_*、woocommerce_cart_hash这类 Cypress.Cookies.preserveOnce('wordpress_logged_in_xxxx', 'woocommerce_cart_hash', 'woocommerce_items_in_cart'); }); - 或者全局配置(在
cypress.config.js里):export default defineConfig({ e2e: { setupNodeEvents(on, config) {}, cookies: { // 用通配符匹配所有相关Cookie preserve: ['wordpress_logged_in_*', /woocommerce_.+/], }, }, });
3. 确认“添加购物车”的动作真的触发了
你的测试代码里是点击聊天机器人iframe里的go-to-cart-button,但你提到的是“内置Add to cart按钮”——这里要确认:这个按钮是真的执行了添加商品的动作,还是只是跳转到购物车页面?
你可以在测试里加个请求拦截,验证添加购物车的API是否被正确调用:
// 拦截WooCommerce的添加购物车请求,替换成你实际的接口路径 cy.intercept('POST', '/wp-json/wc/v3/cart/add').as('addToCart'); cy.getChatbotIframe().find("[data-cy=go-to-cart-button]").click(); // 等待请求完成,并验证状态码 cy.wait('@addToCart').its('response.statusCode').should('eq', 200);
4. 排查iframe跨域问题
聊天机器人在iframe里,可能存在跨域限制,导致添加购物车的请求没带上必要的Cookie:
- 先确认你的WordPress站点和iframe的域名是否一致,如果不一致,得配置CORS允许跨域携带Cookie;
- 测试阶段可以临时禁用Cypress的Chrome跨域安全策略(仅测试用,生产环境别这么搞):
export default defineConfig({ e2e: { chromeWebSecurity: false, }, });
5. 确保购物车页面完全加载后再检查
有时候购物车页面还没加载完就去检查,会误以为是空的。可以明确跳转到购物车页面,并等待元素加载:
// 明确跳转到购物车页面 cy.visit('/cart'); // 等待购物车项元素出现,替换成你站点实际的购物车项选择器 cy.get('.cart-item').should('exist');
6. 检查自定义插件的购物车逻辑
如果以上都没问题,那就要看看你的自定义插件代码了:
- 检查插件里处理添加购物车的逻辑,是否正确设置了会话或者Cookie;
- 开启WordPress的调试模式(在
wp-config.php里设置WP_DEBUG=true),查看wp-content/debug.log里有没有相关报错。
内容的提问来源于stack exchange,提问作者Fogarasi Norbert
相关产品推荐
相关产品推荐

