From 556a18fa31ca81345a9e585ce5777b64b4c9ea40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Wed, 12 Sep 2018 10:03:40 +0900
Subject: [PATCH] web_renderjs_ui_test: more robust way of waiting for CKEditor

To answer question in the comment:
> How to inspect inside another iframe?

use selectFrame (after waiting for the frame to be added in the DOM of course).

Reference of selenium commands: https://web.archive.org/web/20160807232621/http://release.seleniumhq.org/selenium-core/1.0.1/reference.html#selectFrame (I'm not sure it's still on the web)
---
 .../Zuite_CommonTemplateForRenderjsUi.zpt     | 66 ++++++++++++++++---
 1 file changed, 58 insertions(+), 8 deletions(-)

diff --git a/bt5/erp5_web_renderjs_ui_test/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui_test/Zuite_CommonTemplateForRenderjsUi.zpt b/bt5/erp5_web_renderjs_ui_test/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui_test/Zuite_CommonTemplateForRenderjsUi.zpt
index 343748d0c3..3273dfeaa3 100644
--- a/bt5/erp5_web_renderjs_ui_test/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui_test/Zuite_CommonTemplateForRenderjsUi.zpt
+++ b/bt5/erp5_web_renderjs_ui_test/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui_test/Zuite_CommonTemplateForRenderjsUi.zpt
@@ -1128,15 +1128,35 @@
     <tr>
       <td colspan="3"><b>Verify CKEditor Text Content</b></td>
     </tr>
-    <!-- Wait for ckeditor to be loaded :/ How to inspect inside another iframe? -->
+    <!-- Wait for ckeditor to be loaded -->
     <tr>
-      <td>pause</td>
-      <td>2000</td>
+      <td>waitForElementPresent</td>
+      <td>//div[@data-gadget-scope="editor"]//iframe</td>
+      <td></td>
+    </tr>
+    <tr><!-- gadget iframe -->
+      <td>selectFrame</td>
+      <td>//div[@data-gadget-scope="editor"]//iframe</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>//iframe</td>
+      <td></td>
+    </tr>
+    <tr><!-- CKEditor iframe -->
+      <td>selectFrame</td>
+      <td>//iframe</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>//body</td>
       <td></td>
     </tr>
     <tr>
       <td>storeEval</td>
-      <td>document.querySelector('#selenium_myiframe').contentWindow.document.querySelector('iframe').contentWindow.document.querySelector('iframe').contentWindow.document.body.innerHTML</td>
+      <td>selenium.browserbot.getCurrentWindow().document.body.innerHTML</td>
       <td>_macro_verify_ckeditor_text_content_temporary_var</td>
     </tr>
     <tr>
@@ -1144,6 +1164,11 @@
       <td>storedVars['_macro_verify_ckeditor_text_content_temporary_var']</td>
       <td tal:content="python: text_content"></td>
     </tr>
+    <tr>
+      <td>selectFrame</td>
+      <td>relative=top</td>
+      <td></td>
+    </tr>
     <tr>
       <td colspan="3"><p></p></td>
     </tr>
@@ -1157,17 +1182,42 @@
     <tr>
       <td colspan="3"><b>Type CKEditor Text Content</b></td>
     </tr>
-    <!-- Wait for ckeditor to be loaded :/ How to inspect inside another iframe? -->
+    <!-- Wait for ckeditor to be loaded -->
     <tr>
-      <td>pause</td>
-      <td>20000</td>
+      <td>waitForElementPresent</td>
+      <td>//div[@data-gadget-scope="editor"]//iframe</td>
+      <td></td>
+    </tr>
+    <tr><!-- gadget iframe -->
+      <td>selectFrame</td>
+      <td>//div[@data-gadget-scope="editor"]//iframe</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>//iframe</td>
+      <td></td>
+    </tr>
+    <tr><!-- CKEditor iframe -->
+      <td>selectFrame</td>
+      <td>//iframe</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>//body</td>
       <td></td>
     </tr>
     <tr>
       <td>storeEval</td>
-      <td tal:content="python: 'document.querySelector(\'#selenium_myiframe\').contentWindow.document.querySelector(\'iframe\').contentWindow.document.querySelector(\'iframe\').contentWindow.document.body.innerHTML = \'{}\''.format(text_content.replace('\n', '\\n').replace('\'', '\\\''))"></td>
+      <td tal:content="python: 'selenium.browserbot.getCurrentWindow().document.body.innerHTML = \'{}\''.format(text_content.replace('\n', '\\n').replace('\'', '\\\''))"></td>
       <td>_macro_type_ckeditor_text_content_temporary_var</td>
     </tr>
+    <tr>
+      <td>selectFrame</td>
+      <td>relative=top</td>
+      <td></td>
+    </tr>
     <tr>
       <td colspan="3"><p></p></td>
     </tr>
-- 
2.30.9