diff options
Diffstat (limited to 'testing/marionette/client/docs')
-rw-r--r-- | testing/marionette/client/docs/Makefile | 153 | ||||
-rw-r--r-- | testing/marionette/client/docs/advanced/actions.rst | 46 | ||||
-rw-r--r-- | testing/marionette/client/docs/advanced/debug.rst | 54 | ||||
-rw-r--r-- | testing/marionette/client/docs/advanced/findelement.rst | 126 | ||||
-rw-r--r-- | testing/marionette/client/docs/advanced/landing.rst | 13 | ||||
-rw-r--r-- | testing/marionette/client/docs/advanced/stale.rst | 71 | ||||
-rw-r--r-- | testing/marionette/client/docs/basics.rst | 185 | ||||
-rw-r--r-- | testing/marionette/client/docs/conf.py | 259 | ||||
-rw-r--r-- | testing/marionette/client/docs/index.rst | 16 | ||||
-rw-r--r-- | testing/marionette/client/docs/interactive.rst | 55 | ||||
-rw-r--r-- | testing/marionette/client/docs/make.bat | 190 | ||||
-rw-r--r-- | testing/marionette/client/docs/reference.rst | 51 |
12 files changed, 0 insertions, 1219 deletions
diff --git a/testing/marionette/client/docs/Makefile b/testing/marionette/client/docs/Makefile deleted file mode 100644 index f3d89d6d47..0000000000 --- a/testing/marionette/client/docs/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make <target>' where <target> is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MarionettePythonClient.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MarionettePythonClient.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/MarionettePythonClient" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MarionettePythonClient" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/testing/marionette/client/docs/advanced/actions.rst b/testing/marionette/client/docs/advanced/actions.rst deleted file mode 100644 index 294855a6f7..0000000000 --- a/testing/marionette/client/docs/advanced/actions.rst +++ /dev/null @@ -1,46 +0,0 @@ -Actions -======= - -.. py:currentmodule:: marionette - -Action Sequences ----------------- - -:class:`Actions` are designed as a way to simulate user input as closely as possible -on a touch device like a smart phone. A common operation is to tap the screen -and drag your finger to another part of the screen and lift it off. - -This can be simulated using an Action:: - - from marionette import Actions - - start_element = marionette.find_element('id', 'start') - end_element = marionette.find_element('id', 'end') - - action = Actions(marionette) - action.press(start_element).wait(1).move(end_element).release() - action.perform() - -This will simulate pressing an element, waiting for one second, moving the -finger over to another element and then lifting the finger off the screen. The -wait is optional in this case, but can be useful for simulating delays typical -to a users behaviour. - -Multi-Action Sequences ----------------------- - -Sometimes it may be necessary to simulate multiple actions at the same time. -For example a user may be dragging one finger while tapping another. This is -where :class:`MultiActions` come in. MultiActions are simply a way of combining -two or more actions together and performing them all at the same time:: - - action1 = Actions(marionette) - action1.press(start_element).move(end_element).release() - - action2 = Actions(marionette) - action2.press(another_element).wait(1).release() - - multi = MultiActions(marionette) - multi.add(action1) - multi.add(action2) - multi.perform() diff --git a/testing/marionette/client/docs/advanced/debug.rst b/testing/marionette/client/docs/advanced/debug.rst deleted file mode 100644 index e72d2549bd..0000000000 --- a/testing/marionette/client/docs/advanced/debug.rst +++ /dev/null @@ -1,54 +0,0 @@ -Debugging -========= - -.. py:currentmodule:: marionette - -Sometimes when working with Marionette you'll run into unexpected behaviour and -need to do some debugging. This page outlines some of the Marionette methods -that can be useful to you. - -Please note that the best tools for debugging are the `ones that ship with -Gecko`_. This page doesn't describe how to use those with Marionette. Also see -a related topic about `using the debugger with Marionette`_ on MDN. - -.. _ones that ship with Gecko: https://developer.mozilla.org/en-US/docs/Tools -.. _using the debugger with Marionette: https://developer.mozilla.org/en-US/docs/Marionette/Debugging - - -Storing Logs on the Server -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -By calling `~Marionette.log` it is possible to store a message on the server. -Logs can later be retrieved using `~Marionette.get_logs`. For example:: - - try: - marionette.log("Sending a click event") # logged at INFO level - elem.click() - except: - marionette.log("Something went wrong!", "ERROR") - - print(marionette.get_logs()) - -Disclaimer: Example for illustrative purposes only, don't actually hide -tracebacks like that! - - -Seeing What's on the Page -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Sometimes it's difficult to tell what is actually on the page that is being -manipulated. Either because it happens too fast, the window isn't big enough or -you are manipulating a remote server! There are two methods that can help you -out. The first is `~Marionette.screenshot`:: - - marionette.screenshot() # takes screenshot of entire frame - elem = marionette.find_element(By.ID, 'some-div') - marionette.screenshot(elem) # takes a screenshot of only the given element - -Sometimes you just want to see the DOM layout. You can do this with the -`~Marionette.page_source` property. Note that the page source depends on the -context you are in:: - - print(marionette.page_source) - marionette.set_context('chrome') - print(marionette.page_source) diff --git a/testing/marionette/client/docs/advanced/findelement.rst b/testing/marionette/client/docs/advanced/findelement.rst deleted file mode 100644 index abcbc8e89a..0000000000 --- a/testing/marionette/client/docs/advanced/findelement.rst +++ /dev/null @@ -1,126 +0,0 @@ -Finding Elements -================ -.. py:currentmodule:: marionette - -One of the most common and yet often most difficult tasks in Marionette is -finding a DOM element on a webpage or in the chrome UI. Marionette provides -several different search strategies to use when finding elements. All search -strategies work with both :func:`~Marionette.find_element` and -:func:`~Marionette.find_elements`, though some strategies are not implemented -in chrome scope. - -In the event that more than one element is matched by the query, -:func:`~Marionette.find_element` will only return the first element found. In -the event that no elements are matched by the query, -:func:`~Marionette.find_element` will raise `NoSuchElementException` while -:func:`~Marionette.find_elements` will return an empty list. - -Search Strategies ------------------ - -Search strategies are defined in the :class:`By` class:: - - from marionette import By - print(By.ID) - -The strategies are: - -* `id` - The easiest way to find an element is to refer to its id directly:: - - container = client.find_element(By.ID, 'container') - -* `class name` - To find elements belonging to a certain class, use `class name`:: - - buttons = client.find_elements(By.CLASS_NAME, 'button') - -* `css selector` - It's also possible to find elements using a `css selector`_:: - - container_buttons = client.find_elements(By.CSS_SELECTOR, '#container .buttons') - -* `name` - Find elements by their name attribute (not implemented in chrome - scope):: - - form = client.find_element(By.NAME, 'signup') - -* `tag name` - To find all the elements with a given tag, use `tag name`:: - - paragraphs = client.find_elements(By.TAG_NAME, 'p') - -* `link text` - A convenience strategy for finding link elements by their - innerHTML (not implemented in chrome scope):: - - link = client.find_element(By.LINK_TEXT, 'Click me!') - -* `partial link text` - Same as `link text` except substrings of the innerHTML - are matched (not implemented in chrome scope):: - - link = client.find_element(By.PARTIAL_LINK_TEXT, 'Clic') - -* `xpath` - Find elements using an xpath_ query:: - - elem = client.find_element(By.XPATH, './/*[@id="foobar"') - -.. _css selector: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors -.. _xpath: https://developer.mozilla.org/en-US/docs/Web/XPath - - - -Chaining Searches ------------------ - -In addition to the methods on the Marionette object, HTMLElement objects also -provide :func:`~HTMLElement.find_element` and :func:`~HTMLElement.find_elements` -methods. The difference is that only child nodes of the element will be searched. -Consider the following html snippet:: - - <div id="content"> - <span id="main"></span> - </div> - <div id="footer"></div> - -Doing the following will work:: - - client.find_element(By.ID, 'container').find_element(By.ID, 'main') - -But this will raise a `NoSuchElementException`:: - - client.find_element(By.ID, 'container').find_element(By.ID, 'footer') - - -Finding Anonymous Nodes ------------------------ - -When working in chrome scope, for example manipulating the Firefox user -interface, you may run into something called an anonymous node. - -Firefox uses a markup language called XUL_ for its interface. XUL is similar -to HTML in that it has a DOM and tags that render controls on the display. One -ability of XUL is to create re-useable widgets that are made up out of several -smaller XUL elements. These widgets can be bound to the DOM using something -called the `XML binding language (XBL)`_. - -The end result is that the DOM sees the widget as a single entity. It doesn't -know anything about how that widget is made up. All of the smaller XUL elements -that make up the widget are called `anonymous content`_. It is not possible to -query such elements using traditional DOM methods like `getElementById`. - -Marionette provides two special strategies used for finding anonymous content. -Unlike normal elements, anonymous nodes can only be seen by their parent. So -it's necessary to first find the parent element and then search for the -anonymous children from there. - -* `anon` - Finds all anonymous children of the element, there is no search term - so `None` must be passed in:: - - anon_children = client.find_element('id', 'parent').find_elements('anon', None) - -* `anon attribute` - Find an anonymous child based on an attribute. An - unofficial convention is for anonymous nodes to have an - `anonid` attribute:: - - anon_child = client.find_element('id', 'parent').find_element('anon attribute', {'anonid': 'container'}) - - -.. _XUL: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL -.. _XML binding language (XBL): https://developer.mozilla.org/en-US/docs/XBL -.. _anonymous content: https://developer.mozilla.org/en-US/docs/XBL/XBL_1.0_Reference/Anonymous_Content diff --git a/testing/marionette/client/docs/advanced/landing.rst b/testing/marionette/client/docs/advanced/landing.rst deleted file mode 100644 index 0a44de63d7..0000000000 --- a/testing/marionette/client/docs/advanced/landing.rst +++ /dev/null @@ -1,13 +0,0 @@ -Advanced Topics -=============== - -Here are a collection of articles explaining some of the more complicated -aspects of Marionette. - -.. toctree:: - :maxdepth: 1 - - findelement - stale - actions - debug diff --git a/testing/marionette/client/docs/advanced/stale.rst b/testing/marionette/client/docs/advanced/stale.rst deleted file mode 100644 index 0af5768653..0000000000 --- a/testing/marionette/client/docs/advanced/stale.rst +++ /dev/null @@ -1,71 +0,0 @@ -Dealing with Stale Elements -=========================== -.. py:currentmodule:: marionette - -Marionette does not keep a live representation of the DOM saved. All it can do -is send commands to the Marionette server which queries the DOM on the client's -behalf. References to elements are also not passed from server to client. A -unique id is generated for each element that gets referenced and a mapping of -id to element object is stored on the server. When commands such as -:func:`~HTMLElement.click()` are run, the client sends the element's id along -with the command. The server looks up the proper DOM element in its reference -table and executes the command on it. - -In practice this means that the DOM can change state and Marionette will never -know until it sends another query. For example, look at the following HTML:: - - <head> - <script type=text/javascript> - function addDiv() { - var div = document.createElement("div"); - document.getElementById("container").appendChild(div); - } - </script> - </head> - - <body> - <div id="container"> - </div> - <input id="button" type=button onclick="addDiv();"> - </body> - -Care needs to be taken as the DOM is being modified after the page has loaded. -The following code has a race condition:: - - button = client.find_element('id', 'button') - button.click() - assert len(client.find_elements('css selector', '#container div')) > 0 - - -Explicit Waiting and Expected Conditions ----------------------------------------- - -To avoid the above scenario, manual synchronisation is needed. Waits are used -to pause program execution until a given condition is true. This is a useful -technique to employ when documents load new content or change after -``Document.readyState``'s value changes to "complete". - -The :class:`Wait` helper class provided by Marionette avoids some of the -caveats of ``time.sleep(n)``. It will return immediately once the provided -condition evaluates to true. - -To avoid the race condition in the above example, one could do:: - - button = client.find_element('id', 'button') - button.click() - - def find_divs(): - return client.find_elements('css selector', '#container div') - - divs = Wait(client).until(find_divs) - assert len(divs) > 0 - -This avoids the race condition. Because finding elements is a common condition -to wait for, it is built in to Marionette. Instead of the above, you could -write:: - - button = client.find_element('id', 'button') - button.click() - assert len(Wait(client).until(expected.elements_present('css selector', '#container div'))) > 0 - -For a full list of built-in conditions, see :mod:`~marionette.expected`. diff --git a/testing/marionette/client/docs/basics.rst b/testing/marionette/client/docs/basics.rst deleted file mode 100644 index 0de72c6256..0000000000 --- a/testing/marionette/client/docs/basics.rst +++ /dev/null @@ -1,185 +0,0 @@ -.. py:currentmodule:: marionette_driver.marionette - -Marionette Python Client -======================== - -The Marionette Python client library allows you to remotely control a -Gecko-based browser or device which is running a Marionette_ -server. This includes Firefox Desktop and Firefox for Android. - -The Marionette server is built directly into Gecko and can be started by -passing in a command line option to Gecko, or by using a Marionette-enabled -build. The server listens for connections from various clients. Clients can -then control Gecko by sending commands to the server. - -This is the official Python client for Marionette. There also exists a -`NodeJS client`_ maintained by the Firefox OS automation team. - -.. _Marionette: https://developer.mozilla.org/en-US/docs/Marionette -.. _NodeJS client: https://github.com/mozilla-b2g/gaia/tree/master/tests/jsmarionette - -Getting the Client ------------------- - -The Python client is officially supported. To install it, first make sure you -have `pip installed`_ then run: - -.. parsed-literal:: - pip install marionette_driver - -It's highly recommended to use virtualenv_ when installing Marionette to avoid -package conflicts and other general nastiness. - -You should now be ready to start using Marionette. The best way to learn is to -play around with it. Start a `Marionette-enabled instance of Firefox`_, fire up -a python shell and follow along with the -:doc:`interactive tutorial <interactive>`! - -.. _pip installed: https://pip.pypa.io/en/latest/installing.html -.. _virtualenv: http://virtualenv.readthedocs.org/en/latest/ -.. _Marionette-enabled instance of Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/Builds - -Using the Client for Testing ----------------------------- - -Please visit the `Marionette Tests`_ section on MDN for information regarding -testing with Marionette. - -.. _Marionette Tests: https://developer.mozilla.org/en/Marionette/Tests - -Session Management ------------------- -A session is a single instance of a Marionette client connected to a Marionette -server. Before you can start executing commands, you need to start a session -with :func:`start_session() <Marionette.start_session>`: - -.. parsed-literal:: - from marionette_driver.marionette import Marionette - - client = Marionette('localhost', port=2828) - client.start_session() - -This returns a session id and an object listing the capabilities of the -Marionette server. For example, a server running on Firefox Desktop will -have some features which a server running from Firefox Android won't. -It's also possible to access the capabilities using the -:attr:`~Marionette.session_capabilities` attribute. After finishing with a -session, you can delete it with :func:`~Marionette.delete_session()`. Note that -this will also happen automatically when the Marionette object is garbage -collected. - -Context Management ------------------- -Commands can only be executed in a single window, frame and scope at a time. In -order to run commands elsewhere, it's necessary to explicitly switch to the -appropriate context. - -Use :func:`~Marionette.switch_to_window` to execute commands in the context of a -new window: - -.. parsed-literal:: - original_window = client.current_window_handle - for handle in client.window_handles: - if handle != original_window: - client.switch_to_window(handle) - print("Switched to window with '{}' loaded.".format(client.get_url())) - client.switch_to_window(original_window) - -Similarly, use :func:`~Marionette.switch_to_frame` to execute commands in the -context of a new frame (e.g an <iframe> element): - -.. parsed-literal:: - iframe = client.find_element(By.TAG_NAME, 'iframe') - client.switch_to_frame(iframe) - assert iframe == client.get_active_frame() - -Finally Marionette can switch between `chrome` and `content` scope. Chrome is a -privileged scope where you can access things like the Firefox UI itself. -Content scope is where things like webpages live. You can switch between -`chrome` and `content` using the :func:`~Marionette.set_context` and :func:`~Marionette.using_context` functions: - -.. parsed-literal:: - client.set_context(client.CONTEXT_CONTENT) - # content scope - with client.using_context(client.CONTEXT_CHROME): - #chrome scope - ... do stuff ... - # content scope restored - - -Navigation ----------- - -Use :func:`~Marionette.navigate` to open a new website. It's also possible to -move through the back/forward cache using :func:`~Marionette.go_forward` and -:func:`~Marionette.go_back` respectively. To retrieve the currently -open website, use :func:`~Marionette.get_url`: - -.. parsed-literal:: - url = 'http://mozilla.org' - client.navigate(url) - client.go_back() - client.go_forward() - assert client.get_url() == url - - -DOM Elements ------------- - -In order to inspect or manipulate actual DOM elements, they must first be found -using the :func:`~Marionette.find_element` or :func:`~Marionette.find_elements` -methods: - -.. parsed-literal:: - from marionette import HTMLElement - element = client.find_element(By.ID, 'my-id') - assert type(element) == HTMLElement - elements = client.find_elements(By.TAG_NAME, 'a') - assert type(elements) == list - -For a full list of valid search strategies, see :doc:`advanced/findelement`. - -Now that an element has been found, it's possible to manipulate it: - -.. parsed-literal:: - element.click() - element.send_keys('hello!') - print(element.get_attribute('style')) - -For the full list of possible commands, see the :class:`HTMLElement` -reference. - -Be warned that a reference to an element object can become stale if it was -modified or removed from the document. See :doc:`advanced/stale` for tips -on working around this limitation. - -Script Execution ----------------- - -Sometimes Marionette's provided APIs just aren't enough and it is necessary to -run arbitrary javascript. This is accomplished with the -:func:`~Marionette.execute_script` and :func:`~Marionette.execute_async_script` -functions. They accomplish what their names suggest, the former executes some -synchronous JavaScript, while the latter provides a callback mechanism for -running asynchronous JavaScript: - -.. parsed-literal:: - result = client.execute_script("return arguments[0] + arguments[1];", - script_args=[2, 3]) - assert result == 5 - -The async method works the same way, except it won't return until a special -`marionetteScriptFinished()` function is called: - -.. parsed-literal:: - result = client.execute_async_script(""" - setTimeout(function() { - marionetteScriptFinished("all done"); - }, arguments[0]); - """, script_args=[1000]) - assert result == "all done" - -Beware that running asynchronous scripts can potentially hang the program -indefinitely if they are not written properly. It is generally a good idea to -set a script timeout using :func:`~Marionette.timeout.script` and handling -`ScriptTimeoutException`. diff --git a/testing/marionette/client/docs/conf.py b/testing/marionette/client/docs/conf.py deleted file mode 100644 index c3a74eef61..0000000000 --- a/testing/marionette/client/docs/conf.py +++ /dev/null @@ -1,259 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Marionette Python Client documentation build configuration file, created by -# sphinx-quickstart on Tue Aug 6 13:54:46 2013. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import os -import sys - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# sys.path.insert(0, os.path.abspath('.')) - -here = os.path.dirname(os.path.abspath(__file__)) -parent = os.path.dirname(here) -sys.path.insert(0, parent) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Marionette Python Client' -copyright = u'2013, Mozilla Automation and Tools and individual contributors' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -# version = '0' -# The full version, including alpha/beta/rc tags. -# release = '0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. - -html_theme = 'default' - -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: - try: - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - except ImportError: - pass - - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# "<project> v<release> documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a <link> tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'MarionettePythonClientdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # 'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'MarionettePythonClient.tex', u'Marionette Python Client Documentation', - u'Mozilla Automation and Tools team', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'marionettepythonclient', u'Marionette Python Client Documentation', - [u'Mozilla Automation and Tools team'], 1) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'MarionettePythonClient', 'Marionette Python Client Documentation', - 'Mozilla Automation and Tools team', 'MarionettePythonClient', - 'One line description of project.', 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' diff --git a/testing/marionette/client/docs/index.rst b/testing/marionette/client/docs/index.rst deleted file mode 100644 index b1f266726c..0000000000 --- a/testing/marionette/client/docs/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. include:: basics.rst - -Indices and tables ------------------- - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - -.. toctree:: - :hidden: - - Getting Started <basics> - Interactive Tutorial <interactive> - advanced/landing - reference diff --git a/testing/marionette/client/docs/interactive.rst b/testing/marionette/client/docs/interactive.rst deleted file mode 100644 index e6d7556134..0000000000 --- a/testing/marionette/client/docs/interactive.rst +++ /dev/null @@ -1,55 +0,0 @@ -Using the Client Interactively -============================== - -Once you installed the client and have Marionette running, you can fire -up your favourite interactive python environment and start playing with -Marionette. Let's use a typical python shell: - -.. parsed-literal:: - - python - -First, import Marionette: - -.. parsed-literal:: - from marionette import Marionette - -Now create the client for this session. Assuming you're using the default -port on a Marionette instance running locally: - -.. parsed-literal:: - - client = Marionette(host='localhost', port=2828) - client.start_session() - -This will return some id representing your session id. Now that you've -established a connection, let's start doing interesting things: - -.. parsed-literal:: - - client.execute_script("alert('o hai there!');") - -You should now see this alert pop up! How exciting! Okay, let's do -something practical. Close the dialog and try this: - -.. parsed-literal:: - - client.navigate("http://www.mozilla.org") - -Now you're at mozilla.org! You can even verify it using the following: - -.. parsed-literal:: - client.get_url() - -You can even find an element and click on it. Let's say you want to get -the first link: - -.. parsed-literal:: - from marionette import By - first_link = client.find_element(By.TAG_NAME, "a") - -first_link now holds a reference to the first link on the page. You can click it: - -.. parsed-literal:: - first_link.click() - diff --git a/testing/marionette/client/docs/make.bat b/testing/marionette/client/docs/make.bat deleted file mode 100644 index fb02fc1a8c..0000000000 --- a/testing/marionette/client/docs/make.bat +++ /dev/null @@ -1,190 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^<target^>` where ^<target^> is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\MarionettePythonClient.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\MarionettePythonClient.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/testing/marionette/client/docs/reference.rst b/testing/marionette/client/docs/reference.rst deleted file mode 100644 index 7d2fc5b00f..0000000000 --- a/testing/marionette/client/docs/reference.rst +++ /dev/null @@ -1,51 +0,0 @@ -============= -API Reference -============= - -Marionette ----------- -.. autoclass:: marionette_driver.marionette.Marionette - :members: - -HTMLElement ------------ -.. autoclass:: marionette_driver.marionette.HTMLElement - :members: - -DateTimeValue -------------- -.. autoclass:: marionette_driver.DateTimeValue - :members: - -Actions -------- -.. autoclass:: marionette_driver.marionette.Actions - :members: - -MultiActions ------------- -.. autoclass:: marionette_driver.marionette.MultiActions - :members: - -Wait ----- -.. autoclass:: marionette_driver.Wait - :members: - :special-members: -.. autoattribute marionette_driver.wait.DEFAULT_TIMEOUT -.. autoattribute marionette_driver.wait.DEFAULT_INTERVAL - -Built-in Conditions -^^^^^^^^^^^^^^^^^^^ -.. automodule:: marionette_driver.expected - :members: - -Addons ------- -.. autoclass:: marionette_driver.addons.Addons - :members: - -Localization ------------- -.. autoclass:: marionette_driver.localization.L10n - :members: |