Selenium WebDriver的sendKeys只键入新行

时间:2014-10-03 14:14:27

标签: java iframe selenium tinymce

我正在尝试将一些内容发送到表格内的单元格。 该表位于由TinyMCE生成的iFrame中。 由于某种原因,键入的唯一字符是“\ n”。

我有两种方法:switchToFrame()switchToDefault(),用于在iFrame和窗口之间切换。

我有一个在iFrame的<body>内输入的方法,它运行得很好:

public void typeInBody(String content) {
    switchToFrame();

    WebElement body = driver.findElement(BODY_LOC);
    body.click();
    body.sendKeys(content);

    switchToDefault();
}

以下是在列内输入的方法:

public void typeInColumn(int index, String content) {
    switchToFrame();

    WebElement column = driver.findElement(COLS_LOC[index]);
    column.click();
    column.sendKeys(content);

    switchToDefault();
}

最后,这里是“测试”(不是最终测试,仅用于测试上述方法是否有效):

@Test(description = "see if tinyMCE methods work")
public void test() {
    String content = "Neque porro quisquam est \n" + 
                     "qui dolorem ipsum quia \n" + 
                     "dolor sit amet, \n" +
                     "consectetur, adipisci velit...";

    form = page.getForm();
    form.emptyFields(); // driver.findElement(BODY_LOC).clear();

    form.insertColumns(); // it's an option from tinyMC (just clicks the button)
    form.typeInColumn(0, content); // calls typeInColumn(0, content);

    form.clickSave(); // saves the form

    form = page.getForm(); // opens the form again
    // no assert for now
}

这是测试后的TinyMCE。

TinyMCE with typeInColumn()

以及form.typeInBody(content);调用typeInBody(内容)。

TinyMCE with typeInBody()

知道为什么Selenium会这样吗?

1 个答案:

答案 0 :(得分:0)

据我所知,它来自Selenium。即使我在列中放了一个Thread.sleep()并点击了自己,但它仍然没有在单元格内识别它。

我放了一个Action对象并使用它对单元格进行了更改(单击并键入),并且它有效。

新代码:

public void typeInColumn(int index, String content) {
    switchToFrame();

    WebElement column = driver.findElement(COLS_LOC[index]);

    Actions build = new Actions(driver);
    build.moveToElement(column).click().sendKeys(content).build().perform();

    switchToDefault();
}