demo ready

This commit is contained in:
2026-02-23 01:29:15 +01:00
parent f4fd3fd6c5
commit f2eb31bdc7
12 changed files with 1917 additions and 144 deletions

7
TODO.txt Normal file
View File

@@ -0,0 +1,7 @@
dont save null class instead use combination of tag and something
add "title" as attribute
disable special charaters in function names
inputfield writing

11
cypress.config.js Normal file
View File

@@ -0,0 +1,11 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
allowCypressEnv: false,
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
});

10
cypress/e2e/demo.cy.js Normal file
View File

@@ -0,0 +1,10 @@
import { Mainpage } from '../../mainpage.po.ts';
const mainpage = new Mainpage();
describe('template spec', () => {
it('passes', () => {
cy.visit('https://www.optimal-systems.de/')
})
})

View File

@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View File

@@ -0,0 +1,25 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add('login', (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })

17
cypress/support/e2e.js Normal file
View File

@@ -0,0 +1,17 @@
// ***********************************************************
// This example support/e2e.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'

View File

@@ -1,47 +1,8 @@
import { Util } from "../util";
export class Mainpage { export class Mainpage {
static button = ".dummy" static button = ".dummy"
static matmdctooltiptriggerclass = ".mat-mdc-tooltip-trigger"
static matbuttontogglebuttonclass = ".mat-button-toggle-button"
static matmdcinputelementclass = ".mat-mdc-input-element"
static startsearcharia = "[aria-label='Start search']"
get startsearchsearch() {
return cy.nccontains(Mainpage.startsearcharia, 'search');
}
get matmdcinputelement() {
return cy.get(Mainpage.matmdcinputelementclass);
}
get matmdctooltiptriggercloud_circle() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'cloud_circle');
}
get matmdctooltiptriggerlibrary_books() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'library_books');
}
get matmdctooltiptriggermove_to_inbox() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'move_to_inbox');
}
get matbuttontogglebuttondark() {
return cy.nccontains(Mainpage.matbuttontogglebuttonclass, 'Dark');
}
get matbuttontogglebuttonsystem() {
return cy.nccontains(Mainpage.matbuttontogglebuttonclass, 'System');
}
get matmdctooltiptriggersettings() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'settings');
}
get dummybutton() { get dummybutton() {
return cy.nccontains(Mainpage.menubutton, 'Upload document'); return cy.contains(Mainpage.menubutton, 'Upload document');
} }
} }

1831
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,5 +2,8 @@
"type": "commonjs", "type": "commonjs",
"devDependencies": { "devDependencies": {
"@types/node": "^25.3.0" "@types/node": "^25.3.0"
},
"dependencies": {
"cypress": "^15.10.0"
} }
} }

View File

@@ -1,13 +0,0 @@
mainpage.matmdctooltiptriggersettings.click();
mainpage.matbuttontogglebuttonsystem.click();
mainpage.matbuttontogglebuttonclass.click();
mainpage.schreibensieihreanfrageanclaude.click();
mainpage.fontbaseboldkopieren.click();
mainpage.matmdctooltiptriggersettings.click();
mainpage.matbuttontogglebuttonsystem.click();
mainpage.matbuttontogglebuttondark.click();
mainpage.matmdctooltiptriggermove_to_inbox.click();
mainpage.matmdctooltiptriggerlibrary_books.click();
mainpage.matmdctooltiptriggercloud_circle.click();
mainpage.matmdcinputelement.click();
mainpage.startsearchsearch.click();

View File

@@ -21,7 +21,7 @@ interface ParsedGetFn {
name: string; name: string;
body: string; // full body text body: string; // full body text
referencedStatics: string[]; // static variable names used in body referencedStatics: string[]; // static variable names used in body
nccontainsText: string | null; // text in nccontains() if present containsText: string | null; // text in contains() if present
} }
function parsePageObject(): ParsedPageObject { function parsePageObject(): ParsedPageObject {
@@ -70,11 +70,11 @@ function parsePageObject(): ParsedPageObject {
body.includes(s) body.includes(s)
); );
// Extract nccontains text if present: nccontains(Mainpage.foo, 'some text') // Extract contains text if present: contains(Mainpage.foo, 'some text')
const ncMatch = body.match(/nccontains\s*\([^,]+,\s*['"](.+?)['"]\s*\)/); const ncMatch = body.match(/contains\s*\([^,]+,\s*['"](.+?)['"]\s*\)/);
const nccontainsText = ncMatch ? ncMatch[1] : null; const containsText = ncMatch ? ncMatch[1] : null;
getFunctions.push({ name: fnName, body, referencedStatics, nccontainsText }); getFunctions.push({ name: fnName, body, referencedStatics, containsText });
continue; continue;
} }
@@ -116,9 +116,9 @@ function findMatch(data: any, po: ParsedPageObject): MatchResult {
const referencesMatch = fn.referencedStatics.some(s => matchingStatics.includes(s)); const referencesMatch = fn.referencedStatics.some(s => matchingStatics.includes(s));
if (!referencesMatch) continue; if (!referencesMatch) continue;
// If we have text, require nccontains to match it // If we have text, require contains to match it
if (rawText) { if (rawText) {
if (fn.nccontainsText && fn.nccontainsText.toLowerCase() === rawText.toLowerCase()) { if (fn.containsText && fn.containsText.toLowerCase() === rawText.toLowerCase()) {
return { type: "full_match", fnName: fn.name }; return { type: "full_match", fnName: fn.name };
} }
} else { } else {
@@ -228,7 +228,7 @@ function handleClick(data: any) {
// Static exists, just create the get function // Static exists, just create the get function
const getFnName = buildGetFnName(data); const getFnName = buildGetFnName(data);
const getBody = hasText const getBody = hasText
? ` return cy.nccontains(${match.selectorVar}, '${rawText}');` ? ` return cy.contains(${match.selectorVar}, '${rawText}');`
: ` return cy.get(${match.selectorVar});`; : ` return cy.get(${match.selectorVar});`;
const getBlock = ` get ${getFnName}() {\n${getBody}\n }`; const getBlock = ` get ${getFnName}() {\n${getBody}\n }`;
@@ -250,7 +250,7 @@ function handleClick(data: any) {
const staticName = data.ariaLabel ? `${baseName}aria` : `${baseName}class`; const staticName = data.ariaLabel ? `${baseName}aria` : `${baseName}class`;
const staticLine = `static ${staticName} = ${staticValue}`; const staticLine = `static ${staticName} = ${staticValue}`;
const getBody = hasText const getBody = hasText
? ` return cy.nccontains(${selectorVar}, '${rawText}');` ? ` return cy.contains(${selectorVar}, '${rawText}');`
: ` return cy.get(${selectorVar});`; : ` return cy.get(${selectorVar});`;
const getBlock = ` get ${getFnName}() {\n${getBody}\n }`; const getBlock = ` get ${getFnName}() {\n${getBody}\n }`;

View File

@@ -1,80 +0,0 @@
// --- Inserted (tag: <button>, text: "settings") ---
static matmdctooltiptriggerclass = ".mat-mdc-tooltip-trigger"
get matmdctooltiptriggersettings() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'settings');
}
// ------------------------------------------------
// --- Inserted (tag: <button>, text: "System") ---
static matbuttontogglebuttonclass = ".mat-button-toggle-button"
get matbuttontogglebuttonsystem() {
return cy.nccontains(Mainpage.matbuttontogglebuttonclass, 'System');
}
// ------------------------------------------------
// --- Inserted (tag: <div>, text: "null") ---
static schreibensieihreanfrageanclaudearia = "[aria-label='Schreiben Sie Ihre Anfrage an Claude']"
get schreibensieihreanfrageanclaude() {
return cy.get(Mainpage.schreibensieihreanfrageanclaudearia);
}
// ------------------------------------------------
// --- Inserted (tag: <button>, text: "Kopieren") ---
static fontbaseboldclass = ".font-base-bold"
get fontbaseboldkopieren() {
return cy.nccontains(Mainpage.fontbaseboldclass, 'Kopieren');
}
// ------------------------------------------------
// Inserted static + get
static matmdctooltiptriggerclass = ".mat-mdc-tooltip-trigger"
get matmdctooltiptriggersettings() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'settings');
}
// ----
// Inserted static + get
static matbuttontogglebuttonclass = ".mat-button-toggle-button"
get matbuttontogglebuttonsystem() {
return cy.nccontains(Mainpage.matbuttontogglebuttonclass, 'System');
}
// ----
// Inserted get function (static already existed)
get matbuttontogglebuttondark() {
return cy.nccontains(Mainpage.matbuttontogglebuttonclass, 'Dark');
}
// ----
// Inserted get function (static already existed)
get matmdctooltiptriggermove_to_inbox() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'move_to_inbox');
}
// ----
// Inserted get function (static already existed)
get matmdctooltiptriggerlibrary_books() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'library_books');
}
// ----
// Inserted get function (static already existed)
get matmdctooltiptriggercloud_circle() {
return cy.nccontains(Mainpage.matmdctooltiptriggerclass, 'cloud_circle');
}
// ----
// Inserted static + get
static matmdcinputelementclass = ".mat-mdc-input-element"
get matmdcinputelement() {
return cy.get(Mainpage.matmdcinputelementclass);
}
// ----
// Inserted static + get
static startsearcharia = "[aria-label='Start search']"
get startsearchsearch() {
return cy.nccontains(Mainpage.startsearcharia, 'search');
}
// ----