2012-08-27 6 views
5

I WebDriver in Java mit Firefox 14.mit Selen WebDriver mit CKEditor in Firefox 14

Mein Problem bin ist, dass ich nicht WebDriver zu bekommen scheinen gut mit CKEditor zu spielen. Ich habe nach Lösungen gesucht aber nicht gelungen, alle Arbeiten in entweder Firefox 13 oder 14. Diese zu erhalten, sind die Lösungen, die ich versucht habe:

  1. Die normalen Tastaturbefehle interction

    textArea.sendKeys(); 
    

    oder

    textArea.click(); 
    textArea.sendKeys(); 
    

    Ergebnis: Dieser Code eines beliebigen Text in dem CKEditor nicht produzieren würde

  2. Der Code von Selenium issue 3890

    d.get("http://ckeditor.com/demo"); 
    WebElement iframe = d.findElement(By.tagName("iframe")); 
    d.switchTo().frame(iframe); 
    WebElement tinymce = d.findElement(By.tagName("body")); 
    tinymce.clear(); 
    tinymce.sendKeys("Hello, ckeditor!"); 
    

    Ergebnis: Dieser Code wird auf die Website gehen und den Editor löschen, aber nicht in einem beliebigen Text in die CKEditor Instanz setzen.

  3. AdvancedUserInteractions - z. Aktionen() in mehreren Variationen

    textArea.click(); 
    new Actions(driver).sendKeys("Hello, ckeditor!").build().perform(); 
    

    und

    new Actions(driver).sendKeys(textArea, "Hello, ckeditor!").build().perform(); 
    

    und

    new Actions(driver).click(textArea).sendKeys("Hello, ckeditor!").build().perform(); 
    

    Ergebnis: Diese werden nicht produzieren einen beliebigen Text in der CKEditor

  4. Schalt iframes (gemäß der obigen Ausgabe 3890) und mit Advan cedUserInteractions

    Code ähnlich:

    driver.switchTo().frame(iframe); 
    textArea.click(); 
    new Actions(driver).sendKeys("Hello, ckeditor!").build().perform(); 
    

    Ergebnis: Wirft Fehler "c.value nicht definiert ist"

  5. die Javascript verwenden und die CKEditor Api

    JavascriptExecutor js = (JavascriptExecutor) d; 
    System.out.println("[debug] Set Text: " + setText); 
    js.executeScript("CKEDITOR.instances.editor1.setData('<p> "+ setText +"</p>');"); 
    

    Ergebnis: Schließt das Zeichen '/' aus, wenn "org.apache.commons.lang.StringEscapeUtils.escapeHtml" nicht zum Konvertieren von "setText" in HTML-Einträge verwendet wird. Diese Lösung wirft auch einen "FEHLER: null" auf großen Zeichenfolgen.

Irgendwelche Ideen zu Dingen, die ich nicht ausprobiert habe? Korrekturen für Dinge, die ich versucht habe? Irgendwelche anderen Vorschläge?

Danke!

Antwort

3

Manchmal werden Textbereiche als Iframe behandelt, wo Sie zu diesem Rahmen wechseln und den JS-Befehl ausführen müssen, um darauf zu tippen.

final WebDriver frame = driver.switchTo().frame(findElement(By.id("locator")); //any locator 
    ((JavascriptExecutor) driver).executeScript("document.body.innerHTML='" + TestValueThatYouWantToType + "'"); 
    driver.switchTo().defaultContent(); 
0

Fügen Sie einfach wait Anweisung nach tinymce.clear(); und es wird gut funktionieren.