一尘不染

如何在iframe中的Rich Text编辑器中使用SendKeys(webdriver)命令

selenium

我面临以下问题。我无法在其中有文本编辑器的iframe中键入文本:这是html:

<iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" style="width: 100%;  height: 100%;" aria-describedby="cke_39" title="Текстов редактор за форматиран текст,description1" src="" tabindex="0" allowtransparency="true">
<!DOCTYPE html>
<html lang="bg" dir="ltr">
<head>
<body class="cke_editable cke_editable_themed cke_contents_ltr" contenteditable="true" spellcheck="false">
<p>
<br>
</p>
</body>
</html>
</iframe>

到目前为止,这是我所做的,但是测试成功通过,并且文本编辑器中未写入任何文本。可能的解决方案是使用Javascript执行程序,但我对此并不熟悉。

WaitTool.waitForElementPresent(Browser.instance, By.tagName("iframe"), 10);
WebElement iframe = Browser.instance.findElement(By.tagName("iframe"));
Browser.instance.switchTo().frame(iframe);
WebElement description=Browser.instance.findElement(By.xpath("//body[@class='cke_editable cke_editable_themed cke_contents_ltr']"));
description.click();
description.sendKeys("someText");
Browser.instance.switchTo().defaultContent();

提前致谢!


阅读 315

收藏
2020-06-26

共1个答案

一尘不染

有多种实现方法。这是您可能想要看看的文章。

使用Selenium WebDriver测试所见即所得的编辑器

  • 直接发送密钥

这种方法是您尝试过但没有奏效的方法。请务必设法让你的定位程序<iframe><body>正确。否则,我建议使用JavaScriptExecutor更稳定的解决方案。

  • 设置innerHTML

    WaitTool.waitForElementPresent(Browser.instance, By.className(“cke_wysiwyg_frame”), 10);
    WebElement iframe = Browser.instance.findElement(By.className(“cke_wysiwyg_frame”));
    Browser.instance.switchTo().frame(iframe);

    WebElement description = Browser.instance.findElement(By.cssSelector(“body”));
    (JavascriptExecutor)Browser.instance.executeScript(“arguments[0].innerHTML = ‘

    Set text using innerHTML

    ‘“, description);

  • 使用CKEditor的本机API

    // no need to switch iframe
    (JavascriptExecutor)Browser.instance.executeScript(“CKEDITOR.instances.ckeditor.setData(‘

    Native API text

    Editor’)”);

2020-06-26