Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/HISTORY.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Changelog
------------------

- Fix collective.z3cform.datagridfield import [mathias.leimgruber]
- Load ScriptsView/StylesView only for Plone 5 not Plon 6. [mathias.leimgruber]


2.1.2 (2020-07-28)
Expand Down
5 changes: 3 additions & 2 deletions ftw/testbrowser/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@
from plone.app.testing import TEST_USER_PASSWORD

PLONE5 = getFSVersionTuple() >= (5, 0)
PLONE6 = getFSVersionTuple() >= (6, 0)

if PLONE5:
if PLONE5 and not PLONE6:
from ftw.testbrowser.plone5 import disabled_resource_registries


Expand Down Expand Up @@ -1070,7 +1071,7 @@ def _load_html(self, html, parser):

@contextmanager
def _disabled_resource_registries(self):
if not PLONE5 or not self.disable_resource_registries:
if PLONE6 or not PLONE5 or not self.disable_resource_registries:
yield
return

Expand Down
2 changes: 2 additions & 0 deletions ftw/testbrowser/drivers/webtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ def get_response_body(self):
return self.response.body

def get_url(self):
if self.current_url is not None:
return self.current_url.replace('http://nohost:80', 'http://nohost')
return self.current_url

def get_response_headers(self):
Expand Down
22 changes: 15 additions & 7 deletions ftw/testbrowser/pages/factoriesmenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ def menu(browser=default_browser):
not visible.
"""
nodes = browser.css('#plone-contentmenu-factories')

# plone 6 - remove svg icon from menu
for svg_element in browser.css('ul svg'):
svg_element.node.drop_tree()

if len(nodes) == 0:
return None
else:
Expand All @@ -31,15 +36,17 @@ def add(type_name, browser=default_browser):
"""
if not visible(browser=browser):
raise ValueError('Cannot add "%s": no factories menu visible.' % (
type_name))
type_name))

# Plone 4: .actionMenuContent
# Plone 5: >ul
links = menu(browser=browser).css('.actionMenuContent, >ul').find(type_name)
# Plone 5/6: ul
selector = '.actionMenuContent, ul'

links = menu(browser=browser).css(selector).find(type_name)
if len(links) == 0:
raise ValueError('The type "%s" is not addable. Addable types: %s' % (
type_name,
', '.join(addable_types(browser=browser))))
type_name,
', '.join(addable_types(browser=browser))))

links.first.click()

Expand All @@ -53,5 +60,6 @@ def addable_types(browser=default_browser):
raise ValueError('Factories menu is not visible.')

# Plone 4: .actionMenuContent
# Plone 5: >ul
return menu(browser=browser).css('.actionMenuContent a, >ul a').text
# Plone 5/6: ul
selector = '.actionMenuContent a, ul a'
return menu(browser=browser).css(selector).text
8 changes: 6 additions & 2 deletions ftw/testbrowser/pages/plone.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,19 @@ def view_and_portal_type(browser=default_browser):
def first_heading(browser=default_browser):
"""Returns the whitespace-normalized first heading of the current page.
"""
first_heading = browser.css('.documentFirstHeading').first
# Plone 4, 5: .documentFirstHeading
# Plone 6: header h1
first_heading = browser.css('.documentFirstHeading, header h1').first
return normalize_spaces(first_heading.text_content())


def document_description(browser=default_browser):
"""Returns the whitespace-normalized document description of the
current page or None.
"""
nodes = browser.css('.documentDescription')
# Plone 4, 5: .documentDescription
# Plone 6: header .lead
nodes = browser.css('.documentDescription, header .lead')
if len(nodes) == 0:
return None
return normalize_spaces(nodes.first.text_content())
36 changes: 29 additions & 7 deletions ftw/testbrowser/pages/statusmessages.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ def messages(browser=default_browser):

messages = {'info': [],
'warning': [],
'error': []}
'error': [],
'statusmessage-error': [],
'statusmessage-info': [],
'statusmessage-warning': [],
}

for message in browser.css('.portalMessage'):
type_classes = (set(message.classes) & set(messages.keys()))
Expand All @@ -37,6 +41,22 @@ def messages(browser=default_browser):
# </div>
type_text = message.css('strong').first.text
text = re.sub(r'^{} *'.format(re.escape(type_text)), '', message.text)
elif 'statusmessage' in message.classes:
# Plone 6: <div class="portalMessage statusmessage info">
# <svg></svg>
# Message
# <div class="field error">
# <ul>
# <li>
# <div class="invalid-feedback">...</div>
# </li>
# </ul>
# </div>
# </div>
type_text = message.text.replace(
message.css('svg').first.text, '').replace(
message.css('.invalid-feedback').first.text, '')
text = type_text.strip()

if not text:
# message is empty - skip it
Expand All @@ -50,19 +70,19 @@ def messages(browser=default_browser):
def info_messages(browser=default_browser):
"""Returns all "info" statusmessages.
"""
return messages(browser=browser)['info']
return messages(browser=browser)['info'] or messages(browser=browser)['statusmessage-info']


def warning_messages(browser=default_browser):
"""Returns all "warning" statusmessages.
"""
return messages(browser=browser)['warning']
return messages(browser=browser)['warning'] or messages(browser=browser)['statusmessage-warning']


def error_messages(browser=default_browser):
"""Returns all "error" statusmessages.
"""
return messages(browser=browser)['error']
return messages(browser=browser)['error'] or messages(browser=browser)['statusmessage-error']


def as_string(filter_=None, browser=default_browser):
Expand All @@ -72,7 +92,9 @@ def as_string(filter_=None, browser=default_browser):
"""

if filter_ is None:
filter_ = ('info', 'warning', 'error')
filter_ = ('info', 'warning', 'error',
'statusmessage-error', 'statusmessage-info',
'statusmessage-warning')
elif isinstance(filter_, (str, six.text_type)):
filter_ = (filter_,)

Expand All @@ -92,7 +114,7 @@ def assert_message(text, browser=default_browser):
all_messages = reduce(list.__add__, messages(browser=browser).values())
if text not in all_messages:
raise AssertionError('No status message "%s". Current messages: %s' % (
text, as_string(browser=browser)))
text, as_string(browser=browser)))
return True


Expand All @@ -111,5 +133,5 @@ def assert_no_error_messages(browser=default_browser):
"""
if len(error_messages(browser=browser)) > 0:
raise AssertionError('Unexpected "error" status messages: %s' % (
as_string('error', browser=browser)))
as_string('error', browser=browser)))
return True