105 lines
3.8 KiB
TypeScript
105 lines
3.8 KiB
TypeScript
|
|
/**
|
||
|
|
* 调试课程创建 - 检查 Vue 组件状态
|
||
|
|
*/
|
||
|
|
import { test, expect } from '@playwright/test';
|
||
|
|
import { loginAsAdmin } from './helpers';
|
||
|
|
|
||
|
|
test.describe('课程创建调试 - Vue 组件状态检查', () => {
|
||
|
|
test('检查 currentStep 和 handleSave 绑定', async ({ page }) => {
|
||
|
|
test.setTimeout(180000);
|
||
|
|
|
||
|
|
const courseName = '调试测试课程包-' + Date.now();
|
||
|
|
console.log('=== 测试开始 ===');
|
||
|
|
|
||
|
|
// 步骤 1: 登录
|
||
|
|
console.log('=== 步骤 1: 登录 ===');
|
||
|
|
await loginAsAdmin(page);
|
||
|
|
await page.waitForTimeout(1000);
|
||
|
|
|
||
|
|
// 步骤 2: 进入课程创建页面
|
||
|
|
console.log('=== 步骤 2: 进入课程创建页面 ===');
|
||
|
|
await page.goto('/admin/courses/create', { timeout: 30000, waitUntil: 'networkidle' });
|
||
|
|
await page.waitForTimeout(3000);
|
||
|
|
|
||
|
|
// 步骤 3: 填写基本信息
|
||
|
|
console.log('=== 步骤 3: 填写基本信息 ===');
|
||
|
|
await page.getByPlaceholder('请输入课程包名称').fill(courseName);
|
||
|
|
await page.locator('.ant-select-selector').first().click();
|
||
|
|
await page.waitForTimeout(500);
|
||
|
|
await page.getByText('社会认知', { exact: true }).first().click();
|
||
|
|
await page.waitForTimeout(300);
|
||
|
|
await page.getByRole('checkbox', { name: '小班' }).check();
|
||
|
|
await page.waitForTimeout(300);
|
||
|
|
await page.getByPlaceholder('请输入课程包核心内容').fill('调试测试课程内容');
|
||
|
|
await page.waitForTimeout(500);
|
||
|
|
|
||
|
|
// 步骤 4: 点击下一步到最后
|
||
|
|
console.log('=== 步骤 4: 点击下一步 ===');
|
||
|
|
for (let i = 0; i < 6; i++) {
|
||
|
|
const nextButton = page.getByRole('button', { name: '下一步' });
|
||
|
|
if (await nextButton.isVisible().catch(() => false)) {
|
||
|
|
await nextButton.click();
|
||
|
|
await page.waitForTimeout(800);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
await page.waitForTimeout(1000);
|
||
|
|
|
||
|
|
// 步骤 5: 检查 Vue 组件状态
|
||
|
|
console.log('=== 步骤 5: 检查 Vue 组件状态 ===');
|
||
|
|
|
||
|
|
// 使用 Vue DevTools 获取组件状态
|
||
|
|
const componentState = await page.evaluate(() => {
|
||
|
|
// 尝试获取 Vue 组件实例
|
||
|
|
const app = document.querySelector('#app') as any;
|
||
|
|
if (app && app.__vue_app__) {
|
||
|
|
console.log('找到 Vue 应用实例');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 查找包含 currentStep 的组件
|
||
|
|
const courseEditView = document.querySelector('.course-edit-view') as any;
|
||
|
|
if (courseEditView && courseEditView.__vueParentComponent) {
|
||
|
|
const component = courseEditView.__vueParentComponent;
|
||
|
|
return {
|
||
|
|
currentStep: component.ctx?.currentStep,
|
||
|
|
saving: component.ctx?.saving,
|
||
|
|
isEdit: component.ctx?.isEdit,
|
||
|
|
courseId: component.ctx?.courseId,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
return null;
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log('组件状态:', componentState);
|
||
|
|
|
||
|
|
// 检查按钮
|
||
|
|
console.log('=== 步骤 6: 检查按钮 ===');
|
||
|
|
const submitButton = page.getByRole('button', { name: '创建' });
|
||
|
|
const isVisible = await submitButton.isVisible();
|
||
|
|
const isDisabled = await submitButton.isDisabled();
|
||
|
|
console.log('创建按钮可见:', isVisible);
|
||
|
|
console.log('创建按钮禁用:', isDisabled);
|
||
|
|
|
||
|
|
// 获取按钮的 HTML
|
||
|
|
const buttonHTML = await submitButton.evaluate(el => el.outerHTML);
|
||
|
|
console.log('按钮 HTML:', buttonHTML);
|
||
|
|
|
||
|
|
// 尝试直接点击按钮元素
|
||
|
|
console.log('=== 步骤 7: 点击创建 ===');
|
||
|
|
await submitButton.click();
|
||
|
|
console.log('已点击创建按钮');
|
||
|
|
|
||
|
|
// 等待并检查日志
|
||
|
|
await page.waitForTimeout(5000);
|
||
|
|
|
||
|
|
// 检查是否有 API 请求
|
||
|
|
console.log('=== 步骤 8: 检查结果 ===');
|
||
|
|
const successMsg = await page.locator('.ant-message-success').count();
|
||
|
|
const errorMsg = await page.locator('.ant-message-error').count();
|
||
|
|
console.log('成功消息:', successMsg);
|
||
|
|
console.log('错误消息:', errorMsg);
|
||
|
|
|
||
|
|
// 截图
|
||
|
|
await page.screenshot({ path: 'test-results/debug-vue-state.png' });
|
||
|
|
});
|
||
|
|
});
|