如何填写 Codeception 验收测试的富文本编辑器字段

2023-12-27

我正在尝试在 Codeception 的验收测试中填充富文本编辑器字段 (TinyMCE)。

使用fillField()函数不起作用,因为这个“字段”并不是真正的输入字段。这是一个iframe,样式看起来像一个精美的文本区域。

如何在 TinyMCE 框的主体中设置一些文本?我想我正在寻找添加$I->setContent(xpathOrCSS)功能。或者已经存在其他东西可以做到这一点?


最好通过将可重复使用的操作添加到您的Actor class (AcceptanceTester, 默认情况下)。然后,您可以使用测试中的操作来设置富文本编辑器字段的内容,而不会降低测试的可读性。有关这方面的更多详细信息,请参阅代码接收文档 http://codeception.com/docs/06-ReusingTestCode#What-are-Actors.

我在下面提供了 TinyMCE 和 CKEditor 的解决方案。该解决方案使用executeInSelenium()致电让我们访问 Facebook 的底层WebDriver 绑定 https://github.com/facebook/php-webdriver/wiki/Example-command-reference。从那里,我们只需使用所描述的框架切换/Javascript 注入技术here http://yizeng.me/2014/01/31/test-wysiwyg-editors-using-selenium-webdriver/设置目标编辑器的内容。

请注意,最后的调用$webDriver->switchTo()->defaultContent()非常重要 - 这会将 WebDriver 的焦点从 RTE 切换回来iframe到包含它的页面。

演员职能:

<?php

class AcceptanceTester extends \Codeception\Actor {
    use _generated\AcceptanceTesterActions;

    public function fillCkEditorById($element_id, $content) {
        $this->fillRteEditor(
            \Facebook\WebDriver\WebDriverBy::cssSelector(
                '#cke_' . $element_id . ' .cke_wysiwyg_frame'
            ),
            $content
        );
    }

    public function fillCkEditorByName($element_name, $content) {
        $this->fillRteEditor(
            \Facebook\WebDriver\WebDriverBy::cssSelector(
                'textarea[name="' . $element_name . '"] + .cke .cke_wysiwyg_frame'
            ),
            $content
        );
    }

    public function fillTinyMceEditorById($id, $content) {
        $this->fillTinyMceEditor('id', $id, $content);
    }

    public function fillTinyMceEditorByName($name, $content) {
        $this->fillTinyMceEditor('name', $name, $content);
    }

    private function fillTinyMceEditor($attribute, $value, $content) {
        $this->fillRteEditor(
            \Facebook\WebDriver\WebDriverBy::xpath(
                '//textarea[@' . $attribute . '=\'' . $value . '\']/../div[contains(@class, \'mce-tinymce\')]//iframe'
            ),
            $content
        );
    }

    private function fillRteEditor($selector, $content) {
        $this->executeInSelenium(
            function (\Facebook\WebDriver\Remote\RemoteWebDriver $webDriver)
            use ($selector, $content) {
                $webDriver->switchTo()->frame(
                    $webDriver->findElement($selector)
                );

                $webDriver->executeScript(
                    'arguments[0].innerHTML = "' . addslashes($content) . '"',
                    [$webDriver->findElement(\Facebook\WebDriver\WebDriverBy::tagName('body'))]
                );

                $webDriver->switchTo()->defaultContent();
            });
    }
}

用法示例:

$content = '<h1>Hello, world!</h1>';

// CKEditor
$I->fillCkEditorByName('rich_content', $content);
$I->fillCkEditorById('my_ckeditor_textarea', $content);

// TinyMCE
$I->fillTinyMceEditorByName('rich_content', $content);
$I->fillTinyMceEditorById('my_tinymce_textarea', $content);

在所有情况下,第一个参数指的是name/id原件的属性textarea元素,第二个参数是要填充的 HTML 内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何填写 Codeception 验收测试的富文本编辑器字段 的相关文章

  • 如何动态添加tinymce 4.x到textarea?

    我在初始化后动态地将tinymce添加到textarea时遇到了一个小问题 tinymce init selector textarea theme modern height 100 plugins advlist autolink im
  • 在多个编辑器之间共享 Quill 工具栏

    与伟大的Quill http quilljs com Javascript 的富文本编辑器 我试图让两个或更多编辑器共享同一个工具栏 我想 从文档 http quilljs com docs api 目前这是不可能的 所以我试图通过 API
  • HTMLPurifier 破坏图像

    我试图根据 WYSIWYG CK 编辑器 的用户输入运行 HTMLPurifier 但图像损坏 未过滤的输入 img alt laugh src lib ckeditor plugins smiley images teeth smile
  • CKEditor 新实例始终卸载

    我在 Angular 应用程序中使用 CKEditor 并且有一个视图 每次用户访问新模型时都会重新加载我的 CKEditor 实例 我使用以下 JS 来初始化编辑器 var initEditor function js editor wr
  • tinyMCE 获取编辑器返回 null

    我在具有不同 id 的 2 个文本区域上初始化 2 个 tinyMCE 编辑器 var variable array id cName test mon test tinymce init selector model editor ent
  • 如何在CKEditor 4中设置默认字体和字体大小

    我使用以下代码在 CKEditor 4 中设置默认字体和字体大小 config font defaultLabel Tahoma config fontSize defaultLabel 24px 但上面的代码在 Mozilla Firef
  • 切换到没有名称的窗口

    使用 Codeception 测试框架和 Selenium 2 模块来测试网站 我最终点击了一个超链接 该链接打开了一个没有名称的新窗口 结果是switchToWindow 函数将不起作用 因为它正在尝试切换到父窗口 我当前所在的窗口 如果
  • 具有 DOM 操作的自定义插件 CKEditor 4.x

    我正在为 CKEditor 4 7 开发一个自定义插件 它做了一个简单的思考 以防用户选择一些东西 它会将其放入具有特定类的 div 中 否则它将放入一个具有相同类的 div 其中包含文本 例如 在此处添加内容 我尝试根据 CKEditor
  • 在 CKEditor 4.x 中,有没有办法在初始化后获取允许的标签列表?

    有没有办法获取 CKEditor 4 x 准确地说是 4 4 7 中所有允许标签的列表after编辑器已使用所有插件进行初始化 并且所有allowedContentRules and disallowedContentRules或已应用任何
  • ReferenceError:CKEDITOR 未定义

    我正在尝试使用CK编辑器 http ckeditor com 但是当我尝试时出现以下错误 在 JS 控制台中 例子 http docs ckeditor com guide dev framed从教程中 浏览器中仅显示一个文本框 Refer
  • 当我们点击编辑器外部时如何隐藏ckeditor?

    这是我的代码 div div
  • CKEditor 3.x - 动态添加 UI 元素到插件对话框

    我正在构建一个 CKEditor 3 x 插件 它允许通过与我们的后端系统绑定的单独查看器应用程序有条件地显示 HTML 的某些部分 我的 CKEditor 插件将用于定义这些条件 但我对如何动态地将 UI 元素添加到插件对话框感到困惑 在
  • 防止 CKEditor 添加“data-cke-saved”并转换 <

    我有 CKEditor 的 jQuery 实现 我们经常使用对话框将 HTML 标记添加到 A 标记的 标题 属性 然而 当我们这样做时 它会转换 HTML 代码 以便将其解析为文本 我们需要代码保持其输入时的确切形式 而不是在任何地方放置
  • 如何找到我的 typescript/react 模块的声明?

    我对前端技术非常 非常 陌生 特别是 React 和 TypeScript 当尝试做一件简单的事情 即使用反应组件时 我的问题出现了https github com ckeditor ckeditor5 https github com c
  • 如何自定义 ckeditor 4.2 内置插件(如链接)?

    如果我想向链接插件添加选项卡 最佳实践方法是什么 我不想更改发布代码 只需用带有我的自定义的版本覆盖它即可 因此 很容易更新新版本 CKEDITOR 4 2 有这方面的操作方法吗 我正在使用新的内联样式工具栏 如果我获得源代码 我可以在没有
  • Codeception API 测试响应返回“N/A”

    我正在使用 Laravel 和 Codeception 作为测试框架编写 API 我无法让 Codeception 返回响应代码 我可以从 Codeception 获取响应代码 以及 JSON 响应 我编写了一个简单的测试来从 GET 请求
  • TinyMCE 脏标志未设置或在编辑器离开后自动重置?

    配置 TinyMce 编辑器和一些功能后 如果用户进行了更改但没有保存 我现在想警告用户 为此 我正在检查 Blur 的脏标志 但它总是被设定的false 控制器 js this scope tinymceOptions selector
  • CckEditor - 从 AJAX 加载的模板

    我正在使用 CkEditor 并且想要定义一个自定义模板 该模板使用 AJAX 函数来加载 HTML 字符串 我已经能够定义自定义模板 但如果我对模板对象的 html 属性使用函数 则该函数永远不会执行 是否可以使用 AJAX 和默认模板插
  • 未捕获的类型错误:对象 # 在 Chrome 中没有“查找”方法

    可能与 未捕获的类型错误 对象 没有方法 查找 https stackoverflow com q 11134646 561731 这是我的问题的讨论的聊天记录 https chat stackoverflow com rooms 17 c
  • 如何禁用 TinyMCE 文本区域

    我已经尝试了以下所有方法 tbxNote attr disabled disabled doesn t work tbxNote attr disabled true doesn t work either tinyMCE init mod

随机推荐