[Zope3-checkins]
SVN: Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py
Developed interfaces for the main API.
Stephan Richter
srichter at cosmos.phy.tufts.edu
Tue Jul 26 23:57:36 EDT 2005
Log message for revision 37449:
Developed interfaces for the main API.
Changed:
A Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py
-=-
Added: Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py
===================================================================
--- Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py 2005-07-27 03:57:05 UTC (rev 37448)
+++ Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py 2005-07-27 03:57:36 UTC (rev 37449)
@@ -0,0 +1,244 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Mechanize-based Functional Doctest interfaces
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import zope.interface
+import zope.schema
+
+class IControlsMapping(zope.interface.common.mapping.IReadMapping):
+ """A mapping of all controls of a page.
+
+ If there are multiple controls matching the key, the first one is
+ picked. This can often happen when multiple forms are used on one page. In
+ those cases use the ``IFormMapping`` and ``IForm`` interfaces instead.
+ """
+
+ def __setitem__(key, value):
+ """Set the value of a control."""
+
+ def update(mapping):
+ """Update several control values at once."""
+
+
+class IControl(zope.interface.Interface):
+ """A control (input field) of a page."""
+
+ name = zope.schema.TextLine(
+ title=u"Name",
+ description=u"The name of the control.",
+ required=True)
+
+ value = zope.schema.Field(
+ title=u"Value",
+ description=u"The value of the control",
+ default=None,
+ required=True)
+
+ type = zope.schema.Choice(
+ title=u"Type",
+ description=u"The type of the control",
+ values=['text', 'hidden', 'submit', 'checkbox', 'select',
+ 'radio', 'image', 'file'],
+ required=True)
+
+ options = zope.schema.List(
+ title=u"Options",
+ description=u"A list of possible values for the control.",
+ required=False)
+
+ disabled = zope.schema.Bool(
+ title=u"Disabled",
+ description=u"Describes whether a control is disabled.",
+ default=False,
+ required=False)
+
+ readonly = zope.schema.Bool(
+ title=u"Readonly",
+ description=u"Describes whether a new value can be assigned to the "
+ u"control. For example, the hidden input field is "
+ u"read-only.",
+ default=False,
+ required=False)
+
+ multiple = zope.schema.Bool(
+ title=u"Multiple",
+ description=u"Describes whether this control can hold multiple values.",
+ default=False,
+ required=False)
+
+ def clear():
+ """Clear the value of the control."""
+
+
+class IFormsMapping(zope.interface.common.mapping.IReadMapping):
+ """A mapping of all forms in a page."""
+
+
+class IForm(zope.interface.Interface):
+ """An HTML form of the page."""
+
+ action = zope.schema.TextLine(
+ title=u"Action",
+ description=u"The action (or URI) that is opened upon submittance.",
+ required=True)
+
+ method = zope.schema.Choice(
+ title=u"Method",
+ description=u"The method used to submit the form.",
+ values=['post', 'get', 'put'],
+ required=True)
+
+ enctype = zope.schema.TextLine(
+ title=u"Encoding Type",
+ description=u"The type of encoding used to encode the form data.",
+ required=True)
+
+ name = zope.schema.TextLine(
+ title=u"Name",
+ description=u"The value of the `name` attribute in the form tag, "
+ u"if specified.",
+ required=True)
+
+ id = zope.schema.TextLine(
+ title=u"Id",
+ description=u"The value of the `id` attribute in the form tag, "
+ u"if specified.",
+ required=True)
+
+ controls = zope.schema.Object(
+ title=u"Controls",
+ description=(u"A mapping of control elements of the form. The key is "
+ u"actually quiet flexible and searches the text, id, and "
+ u"name of the control."),
+ schema=IControlsMapping,
+ required=True)
+
+ def submit(text=None, id=None, name=None, coord=(1,1)):
+ """Submit this form.
+
+ The `text`, `id`, and `name` arguments select the submit button to use
+ to submit the form.
+ """
+
+
+class IBrowser(zope.interface.Interface):
+ """A Test Web Browser."""
+
+ url = zope.schema.URI(
+ title=u"URL",
+ description=u"The URL the browser is currently showing.",
+ required=True)
+
+ headers = zope.schema.Field(
+ title=u"Headers",
+ description=u"Heards of the HTTP response; a ``httplib.HTTPMessage``.",
+ required=True)
+
+ contents = zope.schema.Text(
+ title=u"Contents",
+ description=u"The complete response body of the HTTP request.",
+ required=True)
+
+ isHtml = zope.schema.Bool(
+ title=u"Is HTML",
+ description=u"Tells whether the output is HTML or not.",
+ required=True)
+
+ title = zope.schema.TextLine(
+ title=u"Title",
+ description=u"Title of the displayed page",
+ required=False)
+
+ controls = zope.schema.Object(
+ title=u"Controls",
+ description=(u"A mapping of control elements on the page. The key is "
+ u"actually quiet flexible and searches the text, id, and "
+ u"name of the control."),
+ schema=IControlsMapping,
+ required=True)
+
+ forms = zope.schema.Object(
+ title=u"Forms",
+ description=(u"A mapping of form elements on the page. The key is "
+ u"actually quiet flexible and searches the id and name "
+ u"of the form element."),
+ schema=IFormsMapping,
+ required=True)
+
+ def addHeader(key, value):
+ """Adds a header to each HTTP request.
+
+ Adding additional headers can be useful in many ways, from setting the
+ credentials token to specifying the browser identification string.
+ """
+
+ def open(url, data=None):
+ """Open a URL in the browser.
+
+ The URL must be fully qualified. However, note that the server name
+ and port is arbitrary for Zope 3 functional tests, since the request
+ is sent to the publisher directly.
+
+ The ``data`` argument describes the data that will be sent as the body
+ of the request.
+ """
+
+ def reload():
+ """Reload the current page."""
+
+ def goBack(count=1):
+ """Go back in history by a certain amount of visisted pages.
+
+ The ``count`` argument specifies how far to go back. It is set to 1 by
+ default.
+ """
+
+ def click(text=None, url=None, id=None, name=None, coord=(1,1)):
+ """Click on a link in the page.
+
+ This method opens a new URL that is behind the link. The link itself
+ is described by the arguments of the method:
+
+ o ``text`` -- A regular expression trying to match the link's text,
+ in other words everything between <a> and </a> or the value of the
+ submit button.
+
+ o ``url`` -- The URL the link is going to. This is either the
+ ``href`` attribute of an anchor tag or the action of a form.
+
+ o ``id`` -- The id attribute of the anchor tag submit button.
+
+ o ``name`` -- The name attribute of the anchor tag submit button.
+
+ o ``coord`` -- This is a 2-tuple that describes the coordinates of
+ the mouse cursor on an image map when the mouse button is clicked.
+ """
+
+ def getControl(text, type=None, form=None):
+ """Get a control in the page.
+
+ This method returns a control object for a particular input field in
+ the page. By default all forms are searched and the first successful
+ hit is returned.
+
+ When the ``type`` is specified, only input fields of that type will be
+ searched.
+
+ The ``form`` specifies a specific form on the page that is searched
+ for a control. The argument must be a form of the ``forms`` mapping.
+ """
Property changes on: Zope3/trunk/src/zope/app/testing/testbrowser/interfaces.py
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Zope3-Checkins
mailing list