This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

About this module

selenium webdriver wrapper to make manipulation easier.

Features

  • Support Internet Explorer, Chrome, Opera, Firefox, PhantomJS
  • Support remote webdriver.
  • Easy to type aliases. (find_element_by_xpath => xpath, etc.)
  • Wrapped WebdriverWait( … ).until( … ) pattern.
  • Polling at the time of clicking or selecting.
  • Wrapping chaining.

How to install

Requires python2.6 or later. You need pip or distribute or setuptools:

$ pip install seleniumwrapper

or use easy_install:

$ easy_install seleniumwrapper

also you need selenium:

$ pip install selenium

Example to use

create function helps you to init webdriver and wrap it easily:

>>> import seleniumwrapper as selwrap
>>> br = selwrap.create("chrome")

connect function helps you to use remote webdriver and wrap it:

>>> br = connect("android", "http://localhost:9999", {"acceptSslCerts": True})

SeleniumWrapper delegate to its wrapped webdriver:

>>> br.get("http://www.example.com")
<seleniumwrapper.wrapper.SeleniumWrapper object at 0x...>
>>> br.xpath("//div[@class='main'])
<seleniumwrapper.wrapper.SeleniumWrapper object at 0x...>

Setting eager=True to invoke find_elements:

>>> br.xpath("//a", eager=True)
<seleniumwrapper.wrapper.SeleniumContainerWrapper object at 0x...>

SeleniumContainerWrapper also delegate to its wrapped container:

>>> links = [i.get_attribute("href") for i in br.xpath("//a", eager=True)]

Each contents in SeleniumContainerWrapper also SeleniumWrapper:

>>> tds = [tr.xpath("//td", eager=True) for tr in br.xpath("//tr", eager=True)]

Basic API

  • seleniumwrapper.create(drivername)

  • seleniumwrapper.connect(drivername, executor, custom_capabilities)

    Create webdriver instance and wrap it with SeleniumWrapper.

SeleniumWrapper

  • unwrap

    Retrieves WebDriver or WebElement from wrapped object:

    >>> isinstance(br.unwrap, WebElement)
    True
    
  • parent

    find_element_by_xpath(“./parent::node()”):

    >>> price = br.by_tag("th", "Price").parent.by_tag("td").text
    
  • performance

    Returns window.performance wrapped object:

    >>> performance = br.performance
    >>> timing = performance.timing
    >>> navigation = performance.navigation
    >>> timing.loadEventEnd
    1358319427476
    
  • to_select

    Convert wrapped WebElement to raw Select object:

    >>> br.by_id('select_button').to_select.select_by_visible_text("hoge")
    

    select method returns the same as below:

    >>> br.select(id = 'select_button').select_by_visible_text("hoge")
    
  • alert

    Returns Alert(switch_to_alert()) object:

    >>> br.alert.accept()
    
  • current_url

    Returns current_url after loading page body:

    >>> br.current_url
    
  • timeout

    Accessor for _timeout property:

    >>> br.timeout
    5
    >>> br.timeout = 10
    >>> br.timeout
    10
    
  • silent

    Accessor for _silent property:

    # default
    >>> br.by_id("Hoge")
    Traceback (most recent call last):
        ...
    NoSuchElementException:...
    >>> br.silent = True
    >>> br.by_id("Hoge") is None
    True
    
  • attr(name)

    Shortcut to get_attribute:

    >>> br.attr('href')
    
  • click(timeout=3, presleep=0, postsleep=0)

    Continue to polling until timeout or element is displayed and clickable:

    >>> br.button("Send").click()
    
  • scroll_to(x, y)

    equivalent to javascript’s scrollTo:

    >>> br.scrollTo(0, 100)
    
  • scroll_by(x, y)

    equivalent to javascript’s scrollBy:

    >>> br.scrollBy(10, 10)
    
  • scroll_into_view(jq_identifier, align_with_top=True)

    find elements by jq_identifier and retrieve its first element and invoke scrollIntoView to it:

    >>> var element = $('#hoge');
    >>> element && element.scrollIntoView(true)
    

    second argument is passed as javascript’s boolean to scrollIntoView:

    >>> br.scrollIntoView('#hoge', False)
    
  • waitfor(type, target, eager=False, timeout=3)

    See source:

    >>> br.waitfor("xpath", "//input[@type='submit']")
    
  • xpath(target, eager=False, timeout=3)

    find_element_by_xpath(target, timeout):

    >>> buttons = br.xpath("//input[@type='submit' or @type='button']", eager=True)
    
  • css(target, eager=False, timeout=3)

    find_element_by_css_selector(target, timeout):

    >>> [li.text for li in br.css("ul li")]
    
  • by_tag(self, tag, eager=False, timeout=3, **attributes)

    Returns specified tagged element with specified attributes optionally.:

    >>> br.by_tag("link", rel="stylesheet")
    
  • by_text(text, tag=’*’, partial=False, eager=False, timeout=3)

    similar to find_element_by_link_text or find_element_by_partial_link_text, but this method can be applicable to any tag:

    >>> br.by_text("Go back to Top Page", "a")
    
  • by_class(target, eager=False, timeout=3)

    find_element_by_class_name(target, timeout):

    >>> br.by_class("colored")
    
  • by_id(target, eager=False, timeout=3)

    find_element_by_id(target, timeout):

    >>> br.by_id("main_contents")
    
  • by_name(target, eager=False, timeout=3)

    find_element_by_name(target, timeout):

    >>> br.by_name("page_password")
    
  • by_linktxt(target, eager=False, timeout=3, partial=False)

    find_element_by_link_text(target, timeout). if partial=True, then find_element_by_partial_link_text:

    >>> br.by_linktxt("Go back to", partial=True)
    
  • href(partialurl=None, eager=False, timeout=3):

    find_element_by_xpath(“//a”, timeout). if partialurl was given, search ‘a’ tag which href contains partialurl:

    >>> phplinks = br.href(".php", eager=True)
    
  • img(alt=None, ext=None, eager=False, timeout=3)

    find_elements_by_xpath(“//img”, timeout):

    >>> br.img(alt="I am sorry", ext="sorry.gif")
    
  • button(value, eager=False, timeout=3)

    find_element_by_xpath(“//input[@type=’submit’ or @type=’button’ and @value=’{0}’]|.//button[text()=’{0}’]”.format(value), timeout):

    >>> br.button("Send this form").click()
    
  • checkbox(self, eager=False, timeout=3, **attributes)

    Returns ‘input’ element type=’checkbox’:

    >>> br.checkbox(name='checked_value', id='hoge')
    
  • radio(self, eager=False, timeout=3, **attributes)

    Retuns ‘input’ element type=’radio’.:

    >>> br.radio(name='hoge', id='fuga').click()
    
  • select(self, eager=False, timeout=3, **attributes)

    Returns Select(self.by_tag(“select”, eager, timeout, **attributes) or their wrapped SeleniumContainerWrapper:

    >>> br.select(name="hoge").select_by_index(1)
    >>> [select.is_multiple for select in br.select(eager=True, name="hoge")]
    

SeleniumContainerWrapper

  • size

    Returns length of wrapped iterable:

    >>> br.img(eager=True).size
    
  • sample(size)

    Returns random.sample(self._iterable, size):

    >>> br.img(eager=True).sample(10)
    
  • choice()

    Returns random.choice(self._iterable):

    >>> br.img(eager=True).choice()
    

Recent Change

  • 0.5.4
    • Add support for Python-3.4.
    • Fix button to look for <button> tag.
  • 0.5.3
    • Fix README
  • 0.5.2
    • Add silent mode option.
  • 0.5.0
    • Support Python3.
  • 0.4.3
    • Add perfomance, performance.timing, performance.navigation, performance.memory properties.
  • 0.4.2
    • Add ‘PhantomJS’ support.
  • 0.4.1
    • Fixed some bugs.
  • 0.4.0
    • Added scroll_to, scroll_by, scroll_into_view methods.
  • 0.3.5
    • Added attr method.
    • Fixed some typos.
  • 0.3.4
    • Added size property to SeleniumContainerWrapper
    • Fixed to be able to change default timeout.
  • 0.3.3
    • Fixed bugs of string formatting.
  • 0.3.2
    • Changed alert to wait until Alert’s text is accesible.
    • Override current_url to wait for page body loaded.
  • 0.3.1
    • Added connect functon.
  • 0.3.0
    • Changed tag method to by_tag.
    • Added checkbox, radio.
    • Changed select property to method.
    • Added sample, choice methods to SeleniumContainerWrapper.
    • Fixed click bug.
  • 0.2.4
    • Fixed bug.
  • 0.2.3
    • Added ext argument to img (alt and ext are both optional.)
  • 0.2.2
    • Added new property alert
    • Changed img’s argument from ext to alt( find_element_by_xpath(“//img[@alt=’{}’.format(alt)) )
    • Modified SeleniumContainerWrapper’s __contains__ behavior to unwrap given object if it is a SeleniumWrapper.
Release History

Release History

0.5.4

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.5

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
seleniumwrapper-0.5.4.tar.gz (15.4 kB) Copy SHA256 Checksum SHA256 Source Nov 13, 2014
seleniumwrapper-0.5.4.zip (21.6 kB) Copy SHA256 Checksum SHA256 Source Nov 13, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting