Description
- Plone coredev 6, Python 3.10
- Create a Classic Plone site.
- Add a few items in the root, say a Page and a Folder.
- Go to the folder contents of the root.
- Reload the page a few times.
Problem: sometimes this works, sometimes not.
When it does not work, you only see the title, the document byline, and the overal page structure (header, footer, toolbar). In case it helps, the content-core
looks like this:
<div id="content-core">
<input type="hidden" name="_authenticator" value="e0cdd74ee0d82f0afdff52b429f73fee3b8b270c">
<div class="pat-structure" data-pat-structure="{"vocabularyUrl": "http://localhost:8080/Plone2/@@getVocabulary?name=plone.app.vocabularies.Catalog", "urlStructure": {"base": "http://localhost:8080/Plone2", "appended": "/folder_contents"}, "moveUrl": "http://localhost:8080/Plone2{path}/fc-itemOrder", "indexOptionsUrl": "http://localhost:8080/Plone2/@@qsOptions", "contextInfoUrl": "http://localhost:8080/Plone2{path}/@@fc-contextInfo", "setDefaultPageUrl": "http://localhost:8080/Plone2{path}/@@fc-setDefaultPage", "defaultPageTypes": ["Document", "Event", "News Item", "Collection"], "searchParam": "Title", "availableColumns": {"CreationDate": "Created on", "Creator": "Creator", "Description": "Description", "EffectiveDate": "Publication date", "ExpirationDate": "Expiration date", "ModificationDate": "Last modified", "Subject": "Tags", "Type": "Type", "UID": "UID", "end": "End Date", "exclude_from_nav": "Excluded from navigation", "getObjSize": "Object Size", "id": "ID", "is_folderish": "Folder", "location": "Location", "review_state": "Review state", "start": "Start Date", "mime_type": "MIME type", "total_comments": "Total comments", "last_comment_date": "Last comment date"}, "attributes": ["Title", "path", "getURL", "getIcon", "getMimeIcon", "portal_type", "CreationDate", "Creator", "Description", "EffectiveDate", "ExpirationDate", "ModificationDate", "Subject", "Type", "UID", "end", "exclude_from_nav", "getObjSize", "id", "is_folderish", "location", "review_state", "start", "mime_type", "total_comments", "last_comment_date"], "buttons": [{"tooltip": "Cut", "id": "cut", "icon": "plone-cut", "url": "http://localhost:8080/Plone2/@@fc-cut"}, {"tooltip": "Copy", "id": "copy", "icon": "plone-copy", "url": "http://localhost:8080/Plone2/@@fc-copy"}, {"tooltip": "Paste", "id": "paste", "icon": "plone-paste", "url": "http://localhost:8080/Plone2/@@fc-paste"}, {"tooltip": "Delete", "id": "delete", "icon": "plone-delete", "context": "danger", "url": "http://localhost:8080/Plone2/@@fc-delete", "form": {"title": "Delete selected items", "submitText": "Yes", "submitContext": "danger", "template": "<div>\n <% try{ %>\n <%= data.html || '' %>\n <% }catch(e){} %>\n <label>Are you certain you want to delete the selected items?</label>\n</div>", "closeText": "No", "dataUrl": "http://localhost:8080/Plone2/@@fc-delete"}}, {"tooltip": "Rename", "id": "rename", "icon": "plone-rename", "url": "http://localhost:8080/Plone2/@@fc-rename", "form": {"title": "Rename", "template": "<div class=\"itemstoremove\">\n<% _.each(items, function(item, index) { %>\n <div class=\"item\">\n\n <div class=\"form-group\">\n <input name=\"UID_<%= index %>\" type=\"hidden\" value=\"<%- item.UID %>\" />\n <label>Title</label>\n <input class=\"form-control\" name=\"newtitle_<%= index %>\" value=\"<%= item.Title %>\" />\n <label>Short name</label>\n <input class=\"form-control\" name=\"newid_<%= index %>\" value=\"<%= item.id %>\" />\n </div>\n\n <% if(item.getIcon ){ %><img class=\"thumb-thumb\" src=\"<%= item.getURL %>/@@images/image/thumb\"><% } %>\n\n </div>\n<% }) %>\n</div>\n"}}, {"tooltip": "Tags", "id": "tags", "icon": "tags", "url": "http://localhost:8080/Plone2/@@fc-tags", "form": {"title": "Tags", "template": "<div>\n <label>Tags to remove</label>\n <div class=\"form-group\">\n <select multiple class=\"toremove pat-select2\" name=\"toremove\" style=\"width: 300px\">\n <% var tags = [];\n _.each(items, function(item, index) {\n _.each(item.Subject, function(tag) {\n if(tags.indexOf(tag) === -1){\n tags.push(tag);\n %><option value=\"<%= tag %>\"><%= tag %></option>\n <%\n }\n });\n }); %>\n </select>\n </div>\n <label>Tags to add</label>\n <div class=\"form-group\">\n <input class=\"toadd pat-select2\" style=\"width:300px\" name=\"toadd\" data-pat-select2=\"multiple: true; vocabularyUrl: http://localhost:8080/Plone2/@@getVocabulary?name=plone.app.vocabularies.Keywords\"/>\n </div>\n</div>"}}, {"tooltip": "State", "id": "workflow", "icon": "plone-lock", "url": "http://localhost:8080/Plone2/@@fc-workflow", "form": {"title": "Change workflow of selected items", "template": "<fieldset>\n <div class=\"form-group\">\n <label>Comments</label>\n <textarea class=\"form-control\" rows=\"2\" name=\"comments\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Change State</label>\n <p class=\"help-block\">Select the transition to be used for modifying the items state.</p>\n <select class=\"form-control\" name=\"transition\">\n <% if(data.transitions){\n _.each(data.transitions, function(transition){\n %><option value=\"<%= transition.id %>\"><%= transition.title %></option>\n <%\n });\n } %>\n </select>\n </div>\n <div class=\"checkbox\">\n <label>\n <input type=\"checkbox\" name=\"recurse\" value=\"yes\" />\n <span>Include contained items</span>\n </label>\n <p class=\"help-block\">If checked, this will attempt to modify the status of all content in any selected folders and their subfolders.</p>\n </div>\n</fieldset>", "dataUrl": "http://localhost:8080/Plone2/@@fc-workflow"}}, {"tooltip": "Properties", "id": "properties", "icon": "plone-edit", "url": "http://localhost:8080/Plone2/@@fc-properties", "form": {"title": "Modify properties on items", "template": "<div>\n\n <div class=\"form-group\">\n <label>Publication Date</label>\n <input class=\"form-control pat-date-picker\" name=\"effectiveDate\" data-pat-date-picker=\"{&quot;behavior&quot;: &quot;native&quot;, &quot;week-numbers&quot;: &quot;show&quot;, &quot;first-day&quot;: 0, &quot;today&quot;: &quot;Today&quot;, &quot;clear&quot;: &quot;Clear&quot;}\"/>\n </div>\n\n <div class=\"form-group\">\n <label>Expiration Date</label>\n <input class=\"form-control pat-date-picker\" name=\"expirationDate\" data-pat-date-picker=\"{&quot;behavior&quot;: &quot;native&quot;, &quot;week-numbers&quot;: &quot;show&quot;, &quot;first-day&quot;: 0, &quot;today&quot;: &quot;Today&quot;, &quot;clear&quot;: &quot;Clear&quot;}\"/>\n </div>\n\n <div class=\"form-group\">\n <label>Copyright</label>\n <textarea class=\"form-control\" name=\"copyright\"></textarea>\n </div>\n\n <label>Creators</label>\n <div class=\"form-group\">\n <input name=\"creators\" style=\"width: 300px\" class=\"pat-select2\" data-pat-select2=\"multiple: true;\n vocabularyUrl: http://localhost:8080/Plone2/@@getVocabulary?name=plone.app.vocabularies.Users\"/>\n </div>\n\n <label>Contributors</label>\n <div class=\"form-group\">\n <input name=\"contributors\" style=\"width: 300px\" class=\"pat-select2\" data-pat-select2=\"multiple: true;\n vocabularyUrl: http://localhost:8080/Plone2/@@getVocabulary?name=plone.app.vocabularies.Users\"/>\n </div>\n\n <label>Exclude from navigation</label>\n <div class=\"radio\">\n <label>\n <input type=\"radio\" name=\"exclude-from-nav\" value=\"yes\" />\n <span>Yes</span>\n </label>\n </div>\n <div class=\"radio\">\n <label>\n <input type=\"radio\" name=\"exclude-from-nav\" value=\"no\" />\n <span>No</span>\n </label>\n </div>\n\n <% if (data.languages) { %>\n <label>Language</label>\n <select class=\"form-control\" name=\"language\">\n <% _.each(data.languages, function (lang) { %>\n <option value=\"<%= lang.value %>\"><%= lang.title %></option>\n <% }); %>\n </select>\n <% } %>\n\n <div class=\"checkbox\">\n <label>\n <input type=\"checkbox\" name=\"recurse\" value=\"yes\" />\n <span>Include contained items</span>\n </label>\n <p class=\"help-block\">If checked, this will attempt to modify the status of all content in any selected folders and their subfolders.</p>\n </div>\n\n</div>\n", "dataUrl": "http://localhost:8080/Plone2/@@fc-properties"}}], "rearrange": {"properties": {"created": "Created on", "Creator": "Creator", "effective": "Publication date", "end": "End Date", "expires": "Expiration date", "id": "ID", "is_folderish": "Folder", "modified": "Last modified", "review_state": "Review state", "sortable_title": "Title", "start": "Start Date", "Subject": "Tags", "total_comments": "Total comments", "Type": "Type", "UID": "UID", "getObjPositionInParent": "getObjPositionInParent", "is_default_page": "is_default_page", "exclude_from_nav": "exclude_from_nav", "path": "path"}, "url": "http://localhost:8080/Plone2{path}/@@fc-rearrange"}, "basePath": "/", "upload": {"relativePath": "@@fileUpload", "baseUrl": "http://localhost:8080/Plone2", "initialFolder": "4310134d355d453c88e2931721099d82", "useTus": false}, "thumb_scale": "tile"}"></div>
</div>
It goes wrong on Jenkins as well. For example the "Select All items" says:
Condition 'return !!document.querySelector('.pat-structure div.navbar')' did not become true in 30 seconds.
I can usually find a working link to the report, including screen shots, but apparently not today...
It also goes wrong in my experimental GitHub Action. If you go to the summary and scroll down, you will find as an artifact a zip of parts/test
where you can see all passed and failed robot tests, including screen shots for the failed ones.
Please help make Jenkins green again!
(For the curious among you: the point of my experimental GitHub Action is to see if moving the robot tests to GHA helps: then the tests run in a box, without interference from other jobs.)