在Firefox 14中使用Selenium Webdriver和CkEditor

Tro*_*roy 5 firefox webdriver ckeditor selenium-webdriver

我正在使用Java 14中的Webdriver和Firefox 14.

我的问题是我似乎无法让webdriver与CkEditor很好地配合.我已经找到了解决方案但无法在Firefox 13或14中工作.这些是我尝试过的解决方案:

  1. 正常的sendKeys拦截

    textArea.sendKeys();
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    textArea.click();
    textArea.sendKeys();
    
    Run Code Online (Sandbox Code Playgroud)

    结果:此代码不会在CkEditor中生成任何文本

  2. 来自Selenium的代码问题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!");
    
    Run Code Online (Sandbox Code Playgroud)

    结果:此代码将转到站点并清除编辑器,但不会将任何文本放入CkEditor实例中.

  3. AdvancedUserInteractions - 例如.多个变体中的Actions()

    textArea.click();
    new Actions(driver).sendKeys("Hello, ckeditor!").build().perform();
    
    Run Code Online (Sandbox Code Playgroud)

    new Actions(driver).sendKeys(textArea, "Hello, ckeditor!").build().perform();
    
    Run Code Online (Sandbox Code Playgroud)

    new Actions(driver).click(textArea).sendKeys("Hello, ckeditor!").build().perform();
    
    Run Code Online (Sandbox Code Playgroud)

    结果:这些不会在CkEditor中生成任何文本

  4. 切换iframe(根据上面的问题3890)并使用AdvancedUserInteractions

    代码类似于:

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

    结果:引发错误" c.value未定义 "

  5. 使用Javascript和CkEditor Api

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

    结果:当" org.apache.commons.lang.StringEscapeUtils.escapeHtml "未用于将" setText " 转换为Html条目时,排除"/"字符.此解决方案还会在大字符串上抛出" ERROR:null ".

关于我没有尝试过的事情的任何想法?修复我尝试过的事情?还有其他建议吗?

谢谢!

Rea*_*ary 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();
Run Code Online (Sandbox Code Playgroud)