यह (डिफ़ॉल्ट रूप से AcceptanceTester
) सबसे अच्छा है अपने Actor
वर्ग के लिए फिर से प्रयोग करने योग्य कार्यों जोड़कर ऐसा करते हैं करने के लिए। फिर आप अपने परीक्षणों की पठनीयता को कम किए बिना समृद्ध टेक्स्ट एडिटर फ़ील्ड की सामग्री सेट करने के लिए अपने परीक्षणों में कार्रवाइयों का उपयोग कर सकते हैं। इस पर अधिक जानकारी Codeception documentation में उपलब्ध है।
मैंने नीचे TinyMCE और CKEditor के लिए समाधान शामिल किए हैं। समाधान executeInSelenium()
कॉल का उपयोग करता है ताकि हमें फेसबुक के अंतर्निहित WebDriver bindings तक पहुंच प्रदान की जा सके। वहां से, हम अपने लक्षित संपादक की सामग्री सेट करने के लिए here वर्णित फ़्रेम स्विचिंग/जावास्क्रिप्ट इंजेक्शन तकनीक का उपयोग करते हैं।
ध्यान दें कि $webDriver->switchTo()->defaultContent()
पर अंतिम कॉल बहुत महत्वपूर्ण है - यह वेब ड्राइव्राइवर का आरटीई 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);
सभी मामलों में, पहले पैरामीटर मूल textarea
तत्व की name
/id
विशेषता को दर्शाता है, और दूसरा पैरामीटर एचटीएमएल सामग्री को भरने के लिए है। यदि आप एक साधारण सेटअप है, तो
आप अपने स्वीकृति परीक्षणों के लिए क्या उपयोग कर रहे हैं? चूंकि TinyMCE ज्यादातर जेएस संचालित है, PHPBrowser का उपयोग करने का विकल्प नहीं है, आपको वेबड्राइवर (अनुशंसित) या फैंटॉमजेएस (यदि आपको एक हेडलेस जेएस-सक्षम ब्राउज़र की आवश्यकता है) का उपयोग करने की आवश्यकता होगी –