2012-08-27 61 views
5

我使用webdriver的在Java中使用Firefox 14在Firefox 14

我的問題使用Selenium的webdriver與CKEDITOR的是,我似乎無法得到的webdriver與CKEDITOR發揮很好。我一直在尋求解決方案,但一直未能得到任何工作在任何的Firefox 13或14。這些是我已經嘗試瞭解決方案:

  1. 正常的SendKeys interction

    textArea.sendKeys(); 
    

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

    結果:此代碼不會在CKEDITOR產生任何文本

  2. 的代碼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!"); 
    

    結果:此代碼將去的網站,並清除編輯器,但不會把任何文本到CKEditor的實例。

  3. AdvancedUserInteractions - 例如,行動()在多種變化

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

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

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

    結果:在CKEDITOR

  4. 開關內部框架,這些都不會產生任何文本(根據上述問題3890)並使用Advan cedUserInteractions

    代碼類似於:

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

    結果:拋出錯誤 「c.value未定義

  5. 使用JavaScript和CKEDITOR阿比

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

    結果:不包括在「org.apache.commons.lang.StringEscapeUtils.escapeHtml」是/不是用來「的setText」轉換爲HTML條目「/」字符。此解決方案還會在大型字符串上引發「錯誤:空」。

任何想法,我還沒有嘗試的東西?修復了我嘗試過的事情?還有其他建議嗎?

謝謝!

回答

3

有時文本區域被處理爲Iframe,您必須切換到該幀並運行JS命令才能輸入。

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

只需在tinymce.clear();之後添加等待語句,它就可以正常工作。