90 lines
No EOL
3.5 KiB
TypeScript
90 lines
No EOL
3.5 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { LoginPage } from './LoginPage';
|
|
import { DashboardPage } from './DashboardPage';
|
|
import { CreateEventPage } from './CreateEventPage';
|
|
import { TEST_USERS } from '../data/test-users';
|
|
import { TEST_EVENTS } from '../data/test-events';
|
|
|
|
test.describe('Simple Create Event with TinyMCE', () => {
|
|
test('Create basic event with rich text', async ({ page }) => {
|
|
const loginPage = new LoginPage(page);
|
|
const dashboardPage = new DashboardPage(page);
|
|
const createEventPage = new CreateEventPage(page);
|
|
const trainer = TEST_USERS.trainer;
|
|
|
|
// Login
|
|
await loginPage.navigateToLogin();
|
|
await loginPage.login(trainer.username, trainer.password);
|
|
|
|
// Navigate to create event
|
|
await dashboardPage.clickCreateEvent();
|
|
|
|
// Wait for form to load
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Fill event title
|
|
await page.fill('input[name="post_title"]', 'Test Event');
|
|
|
|
// Handle the TinyMCE editor for description
|
|
// First try to interact with iframe
|
|
const iframe = page.frameLocator('#content_ifr');
|
|
const iframeBody = iframe.locator('body');
|
|
|
|
try {
|
|
// Check if iframe is available
|
|
await iframeBody.waitFor({ timeout: 5000 });
|
|
await iframeBody.click();
|
|
await iframeBody.type('Test event description in rich text editor');
|
|
console.log('Filled description using iframe');
|
|
} catch (e) {
|
|
// If iframe fails, try switching to text mode
|
|
console.log('Iframe failed, trying text mode');
|
|
|
|
const textTab = page.locator('#content-html, button:has-text("Text"), a:has-text("Text")');
|
|
if (await textTab.isVisible()) {
|
|
await textTab.click();
|
|
await page.waitForTimeout(1000);
|
|
|
|
// Now fill the textarea
|
|
const textarea = page.locator('textarea#content, textarea.wp-editor-area');
|
|
await textarea.fill('Test event description in text mode');
|
|
console.log('Filled description in text mode');
|
|
}
|
|
}
|
|
|
|
// Fill dates
|
|
await page.fill('#EventStartDate', '6/1/2025');
|
|
await page.fill('#EventEndDate', '6/1/2025');
|
|
|
|
// Fill times
|
|
await page.fill('#EventStartTime', '09:00');
|
|
await page.fill('#EventEndTime', '17:00');
|
|
|
|
// Submit
|
|
await page.click('input[value="Submit Event"]');
|
|
|
|
// Wait for response
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(3000);
|
|
|
|
console.log(`Final URL: ${page.url()}`);
|
|
|
|
// Take screenshot
|
|
await page.screenshot({ path: 'simple-create-event-tinymce-result.png', fullPage: true });
|
|
|
|
// Check for success or error messages
|
|
const successMessage = page.locator('.tribe-community-notice, .updated, .success-message, .notice-success');
|
|
const errorMessage = page.locator('.error, .notice-error, .tribe-error');
|
|
|
|
if (await successMessage.isVisible()) {
|
|
const message = await successMessage.textContent();
|
|
console.log(`Success: ${message}`);
|
|
}
|
|
|
|
if (await errorMessage.isVisible()) {
|
|
const message = await errorMessage.textContent();
|
|
console.log(`Error: ${message}`);
|
|
}
|
|
});
|
|
}); |