From b8a8b47a7d58e642e2abeca492fb675ce4b872a3 Mon Sep 17 00:00:00 2001 From: Ben Bangert Date: Sat, 26 Feb 2011 19:58:03 -0800 Subject: [PATCH] Iniitial commit. --- .gitignore | 21 ++++ CHANGES.txt | 0 COPYRIGHT.txt | 2 + README.rst | 0 TODO.txt | 0 docs/Makefile | 73 ++++++++++++ docs/_themes | 1 + docs/conf.py | 208 +++++++++++++++++++++++++++++++++ docs/index.rst | 6 + lettuce_webdriver/__init__.py | 1 + lettuce_webdriver/util.py | 11 ++ lettuce_webdriver/webdriver.py | 38 ++++++ setup.cfg | 6 + setup.py | 31 +++++ 14 files changed, 398 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGES.txt create mode 100644 COPYRIGHT.txt create mode 100644 README.rst create mode 100644 TODO.txt create mode 100644 docs/Makefile create mode 120000 docs/_themes create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 lettuce_webdriver/__init__.py create mode 100644 lettuce_webdriver/util.py create mode 100644 lettuce_webdriver/webdriver.py create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31b04f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +*.egg +*.egg-info +*.pyc +*$py.class +*.pt.py +*.txt.py +*~ +.coverage +.tox/ +nosetests.xml +pyramid/coverage.xml +tutorial.db +env26/ +env26-debug/ +bookenv/ +env24/ +env27/ +jyenv/ +pypyenv/ +build/ +dist/ diff --git a/CHANGES.txt b/CHANGES.txt new file mode 100644 index 0000000..e69de29 diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100644 index 0000000..3e51c7d --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,2 @@ +Copyright (c) 2011 Ben Bangert and contributers. +Ben Bangert and contributers, All Rights Reserved diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..e69de29 diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..e69de29 diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..0545c35 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,73 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html web pickle htmlhelp latex changes linkcheck + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " pickle to make pickle files (usable by e.g. sphinx-web)" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + +clean: + -rm -rf _build/* + +html: _themes + mkdir -p _build/html _build/doctrees + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html + @echo + @echo "Build finished. The HTML pages are in _build/html." + +pickle: + mkdir -p _build/pickle _build/doctrees + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle + @echo + @echo "Build finished; now you can process the pickle files or run" + @echo " sphinx-web _build/pickle" + @echo "to start the sphinx-web server." + +web: pickle + +htmlhelp: + mkdir -p _build/htmlhelp _build/doctrees + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in _build/htmlhelp." + +latex: + mkdir -p _build/latex _build/doctrees + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex + @echo + @echo "Build finished; the LaTeX files are in _build/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + mkdir -p _build/changes _build/doctrees + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes + @echo + @echo "The overview file is in _build/changes." + +linkcheck: + mkdir -p _build/linkcheck _build/doctrees + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in _build/linkcheck/output.txt." + +_themes: + git clone git://github.com/Pylons/pylons_sphinx_theme.git _themes diff --git a/docs/_themes b/docs/_themes new file mode 120000 index 0000000..1c20a3b --- /dev/null +++ b/docs/_themes @@ -0,0 +1 @@ +/Users/ben/Programming/Python/pylons_sphinx_theme \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..49bdaeb --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +# +# pyramid_xmlrpc documentation build configuration file +# +# This file is execfile()d with the current directory set to its containing +# dir. +# +# The contents of this file are pickled, so don't put values in the +# namespace that aren't pickleable (module imports are okay, they're +# removed automatically). +# +# All configuration values have a default value; values that are commented +# out serve to show the default value. + +import sys, os, datetime + +# If your extensions are in another directory, add it here. If the directory +# is relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +parent = os.path.dirname(os.path.dirname(__file__)) +sys.path.append(os.path.abspath(parent)) +wd = os.getcwd() +os.chdir(parent) +os.system('%s setup.py test -q' % sys.executable) +os.chdir(wd) + +for item in os.listdir(parent): + if item.endswith('.egg'): + sys.path.append(os.path.join(parent, item)) + +import pkginfo + +# General configuration +# --------------------- + +pkg_info = pkginfo.Develop(os.path.join(os.path.dirname(__file__),'..')) + +# 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', + 'sphinx.ext.intersphinx', + ] + +# Looks for bfg's objects +intersphinx_mapping = {'http://docs.pylonsproject.org/projects/pyramid/dev': None} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General substitutions. +project = 'pyramid_rpc' +copyright = '%s, Ben Bangert ' % datetime.datetime.now().year + +# The default replacements for |version| and |release|, also used in various +# other places throughout the built documents. +# +# The short X.Y version. +version = release = pkg_info.version +# The full version, including alpha/beta/rc tags. + +# 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 documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directories, that shouldn't be +# searched for source files. +#exclude_dirs = [] + +# 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' + + +# Options for HTML output +# ----------------------- + +# Add and use Pylons theme +sys.path.append(os.path.abspath('_themes')) +html_theme_path = ['_themes'] +html_theme = 'pyramid' + +# The style sheet to use for HTML and HTML Help pages. A file of that name +# must exist either in Sphinx' static/ path, or in one of the custom paths +# given in html_static_path. +#html_style = 'repoze.css' + +# The name for this set of Sphinx documents. If None, it defaults to +# " v 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 (within the static path) to place at the top of +# the sidebar. +# html_logo = '.static/logo_hi.gif' + +# 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_use_modindex = 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, the reST sources are included in the HTML build as +# _sources/. +#html_copy_source = True + +# If true, an OpenSearch description file will be output, and all pages +# will contain a tag referring to it. The value of this option must +# be the base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'rpcdoc' + + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, document class [howto/manual]). +latex_documents = [ + ('index', 'rpc.tex', 'pyramid_rpc Documentation', + 'Pylons Project Developers', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the +# top of the title page. +latex_logo = '.static/logo_hi.gif' + +# For "manual" documents, if this is true, then toplevel headings are +# parts, not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..4c1cac3 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,6 @@ +.. _index: + +=========================== +lettuce webdriver extension +=========================== + diff --git a/lettuce_webdriver/__init__.py b/lettuce_webdriver/__init__.py new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/lettuce_webdriver/__init__.py @@ -0,0 +1 @@ +# diff --git a/lettuce_webdriver/util.py b/lettuce_webdriver/util.py new file mode 100644 index 0000000..0e4abfd --- /dev/null +++ b/lettuce_webdriver/util.py @@ -0,0 +1,11 @@ +"""Utility functions that combine steps to locate elements""" +def find_by_id(browser, field, id): + return browser.find_element_by_xpath('//%s[@id=%s]' % (field, id)) + +def find_by_name(browser, field, name): + return browser.find_element_by_xpath('//%s[@name=%s]' % (field, name)) + +def find_by_label(browser, label): + for_id = browser.find_element_by_xpath('//label[@for=%s]' % label) + assert for_id + return find_by_id(browser, for_id) diff --git a/lettuce_webdriver/webdriver.py b/lettuce_webdriver/webdriver.py new file mode 100644 index 0000000..378cd15 --- /dev/null +++ b/lettuce_webdriver/webdriver.py @@ -0,0 +1,38 @@ +"""Webdriver support for lettuce""" +from lettuce import step +from lettuce import world + +from lettuce_webdriver import find_by_id +from lettuce_webdriver import find_by_name +from lettuce_webdriver import find_by_label + + +## Links +@step('I visit "([^"]+)"') +@step('I go to "([^"]+)"') +def goto(step, url): + world.browser.get(url) + +@step('I click "([^"]+)"') +def click(step, name): + elem = world.browser.find_element_by_link_text(name) + elem.click() + +@step('I should see "([^"]+)"') +@step('I see "([^"]+)"') +def should_see(step, text): + assert text in world.browser.get_page_source() + +@step('I should not see "([^"]+)"') +def should_see(step, text): + assert text not in world.browser.get_page_source() + +@step('I should see a link with the url "(.*?)"') +def should_see_link(step, link_url): + assert world.browser.find_element_by_xpath('//a[@href="%s"]' % link_url) + +@step('I should see a link to "(.*?)" with the url "(.*?)"') +def should_see_link_text(step, link_text, link_url): + assert world.browser.find_element_by_xpath('//a[@href="%s"][./text()="%s"]' % + (link_url, link_text)) + diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..a2bae9f --- /dev/null +++ b/setup.cfg @@ -0,0 +1,6 @@ +[nosetests] +where=lettuce_webdriver +match=^test +nocapture=1 +cover-package=lettuce_webdriver +cover-erase=1 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..48147f1 --- /dev/null +++ b/setup.py @@ -0,0 +1,31 @@ +__version__ = '0.1' + +import os + +from setuptools import setup, find_packages + +here = os.path.abspath(os.path.dirname(__file__)) +README = open(os.path.join(here, 'README.rst')).read() +CHANGES = open(os.path.join(here, 'CHANGES.txt')).read() + +setup(name='lettuce_webdriver', + version=__version__, + description='Selenium webdriver extension for lettuce', + long_description=README + '\n\n' + CHANGES, + classifiers=[ + "Intended Audience :: Developers", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP", + ], + keywords='web lettuce bdd', + author="Ben Bangert", + author_email="ben@groovie.org", + url="", + license="MIT", + packages=find_packages(), + include_package_data=True, + zip_safe=False, + tests_require = ['lettuce', 'selenium'], + install_requires=['lettuce','selenium'], + test_suite="lettuce_webdriver", + )