text einfügen mittels javascript funktion
This commit is contained in:
parent
38e653361e
commit
37f89ca76f
|
|
@ -306,7 +306,7 @@ class ClaudeChatInterface:
|
||||||
Zwischenablage/das Eingabefeld Zeit braucht um den Text zu verarbeiten.
|
Zwischenablage/das Eingabefeld Zeit braucht um den Text zu verarbeiten.
|
||||||
|
|
||||||
Ablauf:
|
Ablauf:
|
||||||
1. Text ins Eingabefeld einfügen
|
1. Text via JavaScript ins Eingabefeld einfügen (vermeidet Tastaturlayout-Probleme!)
|
||||||
2. Warte delay_before_send Sekunden
|
2. Warte delay_before_send Sekunden
|
||||||
3. Send-Button klicken (mit Retry)
|
3. Send-Button klicken (mit Retry)
|
||||||
|
|
||||||
|
|
@ -329,9 +329,9 @@ class ClaudeChatInterface:
|
||||||
input_field.click()
|
input_field.click()
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
|
|
||||||
# Text eingeben
|
# Text via JavaScript einfügen (vermeidet QWERTY/QWERTZ Probleme!)
|
||||||
logger.info(f"Füge Text ein ({len(text)} Zeichen)...")
|
logger.info(f"Füge Text ein ({len(text)} Zeichen)...")
|
||||||
input_field.send_keys(text)
|
self._insert_text_via_js(input_field, text)
|
||||||
|
|
||||||
# WARTEN - große Texte brauchen Zeit!
|
# WARTEN - große Texte brauchen Zeit!
|
||||||
if delay_before_send > 0:
|
if delay_before_send > 0:
|
||||||
|
|
@ -431,6 +431,54 @@ class ClaudeChatInterface:
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _insert_text_via_js(self, element, text: str):
|
||||||
|
"""
|
||||||
|
Fügt Text via JavaScript ein (vermeidet Tastaturlayout-Probleme).
|
||||||
|
|
||||||
|
Bei send_keys() werden physische Tasten gedrückt, was bei
|
||||||
|
unterschiedlichen Tastaturlayouts (QWERTY vs QWERTZ) zu
|
||||||
|
falschen Zeichen führt (z.B. y↔z vertauscht).
|
||||||
|
|
||||||
|
Diese Methode fügt den Text direkt als String ein.
|
||||||
|
"""
|
||||||
|
# Escape für JavaScript
|
||||||
|
escaped_text = text.replace('\\', '\\\\').replace('`', '\\`').replace('${', '\\${')
|
||||||
|
|
||||||
|
# Für contenteditable divs (ProseMirror)
|
||||||
|
self.driver.execute_script("""
|
||||||
|
const element = arguments[0];
|
||||||
|
const text = arguments[1];
|
||||||
|
|
||||||
|
// Fokussieren
|
||||||
|
element.focus();
|
||||||
|
|
||||||
|
// Methode 1: Für contenteditable (ProseMirror)
|
||||||
|
if (element.contentEditable === 'true') {
|
||||||
|
// Text als HTML einfügen (respektiert Zeilenumbrüche)
|
||||||
|
const htmlText = text.replace(/\\n/g, '<br>');
|
||||||
|
element.innerHTML = htmlText;
|
||||||
|
|
||||||
|
// Input-Event triggern damit React/Vue es mitbekommt
|
||||||
|
element.dispatchEvent(new Event('input', { bubbles: true }));
|
||||||
|
|
||||||
|
// Cursor ans Ende setzen
|
||||||
|
const range = document.createRange();
|
||||||
|
range.selectNodeContents(element);
|
||||||
|
range.collapse(false);
|
||||||
|
const sel = window.getSelection();
|
||||||
|
sel.removeAllRanges();
|
||||||
|
sel.addRange(range);
|
||||||
|
}
|
||||||
|
// Methode 2: Für textarea/input
|
||||||
|
else {
|
||||||
|
element.value = text;
|
||||||
|
element.dispatchEvent(new Event('input', { bubbles: true }));
|
||||||
|
element.dispatchEvent(new Event('change', { bubbles: true }));
|
||||||
|
}
|
||||||
|
""", element, text)
|
||||||
|
|
||||||
|
logger.debug(f"Text via JavaScript eingefügt ({len(text)} Zeichen)")
|
||||||
|
|
||||||
def _wait_for_response(self, timeout: int = 60):
|
def _wait_for_response(self, timeout: int = 60):
|
||||||
"""Wartet bis Claude fertig getippt hat"""
|
"""Wartet bis Claude fertig getippt hat"""
|
||||||
logger.debug("Warte auf Claudes Antwort...")
|
logger.debug("Warte auf Claudes Antwort...")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue