2012-08-27 14 views
5

Używam Webdriver w Javie z Firefoksem 14.użyciu selen Webdriver z CKEditor Firefox 14

Moim problemem jest to, że nie wydaje się uzyskać webdriver do odegrania estetycznie z CKEditor. Szukałem rozwiązania, ale nie byli w stanie dostać się obróbce w obu Firefox 13 lub 14. Są to rozwiązania, które próbowałem:

  1. Normalne SendKeys interction

    textArea.sendKeys(); 
    

    lub

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

    Wynik: Ten kod nie będzie produkować dowolny tekst w CKEditor

  2. Kod z 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!"); 
    

    Wynik: Kod ten trafi do serwisu i wyczyścić edytor, ale nie będzie można umieścić w dowolnym tekstem do instancji CKEditor.

  3. AdvancedUserInteractions - np. Akcje() w wielu odmianach

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

    i

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

    i

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

    wynik: To nie będzie produkować dowolny tekst w CKEditor

  4. przełączania ramek iframe (zgodnie z wydaniem 3890 powyżej) i przy użyciu Advan cedUserInteractions

    kodu podobnego do:

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

    Wynik: Zgłasza błąd "c.value jest niezdefiniowana"

  5. Używanie języka JavaScript oraz API CKEditor

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

    Wynik: wyklucza znak "/", gdy "org.apache.commons.lang.StringEscapeUtils.escapeHtml" jest/nie jest używane do konwersji "setText" na wpisy html. To rozwiązanie wyrzuca również "BŁĄD: null" na dużych ciągach.

Jakieś pomysły na rzeczy, których nie próbowałem? Naprawiono rzeczy, które próbowałem? Jakieś inne sugestie?

Dzięki!

Odpowiedz

3

Czasami obszary tekstowe są obsługiwane jako ramka, w której należy przejść do tej ramki i uruchomić polecenie JS, aby ją wpisać.

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

Wystarczy dodać oświadczenie wait po tinymce.clear(); i będzie działać poprawnie.

Powiązane problemy