Skip to main content

selenium webdriver wrapper to make manipulation easier.

Project description

About this module

selenium webdriver wrapper to make manipulation easier.

https://secure.travis-ci.org/keitaoouchi/seleniumwrapper.png

Features

  • 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 (exclude python3.x). 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)

    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
  • 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
    
  • 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()
  • 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=’{}’]”.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.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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

seleniumwrapper-0.3.4.zip (17.9 kB view details)

Uploaded Source

seleniumwrapper-0.3.4.tar.gz (11.8 kB view details)

Uploaded Source

File details

Details for the file seleniumwrapper-0.3.4.zip.

File metadata

File hashes

Hashes for seleniumwrapper-0.3.4.zip
Algorithm Hash digest
SHA256 cf17aed63ca53c7a12e5ed14bff772e36afe04156e69a3e60321402a69533e23
MD5 d567fe4a94d8d6ac269a4076296d2936
BLAKE2b-256 de34fde6e4dc675f44552e403e6ae463e632d1f5a50ba0709f228fcd59bb835f

See more details on using hashes here.

File details

Details for the file seleniumwrapper-0.3.4.tar.gz.

File metadata

File hashes

Hashes for seleniumwrapper-0.3.4.tar.gz
Algorithm Hash digest
SHA256 d6558d20931440991149124669aeeac2f7dad78f1b901eb9cb8e82d64e97e88e
MD5 0bf89e6939cf83c88792cb3f4a331ef9
BLAKE2b-256 082a33f6813c79c9a05cb55976294fc10a2078d3b8d35b91e4ebcd47fef34cab

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page