Package: seleniumwrapper
About this moduleselenium webdriver wrapper to make manipulation easier.FeaturesSupport Internet Explorer, Chrome, Opera, Firefox, PhantomJSSupport 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 installRequires python2.6 or later.
You needpipordistributeorsetuptools:$ pip install seleniumwrapperor use easy_install:$ easy_install seleniumwrapperalso you need selenium:$ pip install seleniumExample to usecreatefunction helps you to init webdriver and wrap it easily:>>> import seleniumwrapper as selwrap
>>> br = selwrap.create("chrome")connectfunction 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...>Settingeager=Trueto 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 APIseleniumwrapper.create(drivername)seleniumwrapper.connect(drivername, executor, custom_capabilities)Create webdriver instance and wrap it with SeleniumWrapper.SeleniumWrapperunwrapRetrieves WebDriver or WebElement from wrapped object:>>> isinstance(br.unwrap, WebElement)
Trueparentfind_element_by_xpath(“./parent::node()”):>>> price = br.by_tag("th", "Price").parent.by_tag("td").textperformanceReturns window.performance wrapped object:>>> performance = br.performance
>>> timing = performance.timing
>>> navigation = performance.navigation
>>> timing.loadEventEnd
1358319427476to_selectConvert 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")alertReturns Alert(switch_to_alert()) object:>>> br.alert.accept()current_urlReturns current_url after loading page body:>>> br.current_urltimeoutAccessor for _timeout property:>>> br.timeout
5
>>> br.timeout = 10
>>> br.timeout
10silentAccessor for _silent property:# default
>>> br.by_id("Hoge")
Traceback (most recent call last):
    ...
NoSuchElementException:...
>>> br.silent = True
>>> br.by_id("Hoge") is None
Trueattr(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")]SeleniumContainerWrappersizeReturns length of wrapped iterable:>>> br.img(eager=True).sizesample(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 Change0.5.4Add support for Python-3.4.Fixbuttonto look for<button>tag.0.5.3Fix README0.5.2Add silent mode option.0.5.0Support Python3.0.4.3Addperfomance,performance.timing,performance.navigation,performance.memoryproperties.0.4.2Add ‘PhantomJS’ support.0.4.1Fixed some bugs.0.4.0Addedscroll_to,scroll_by,scroll_into_viewmethods.0.3.5Addedattrmethod.Fixed some typos.0.3.4Added size property to SeleniumContainerWrapperFixed to be able to change default timeout.0.3.3Fixed bugs of string formatting.0.3.2Changedalertto wait until Alert’s text is accesible.Overridecurrent_urlto wait for page body loaded.0.3.1Addedconnectfuncton.0.3.0Changedtagmethod toby_tag.Addedcheckbox,radio.Changedselectproperty to method.Addedsample,choicemethods to SeleniumContainerWrapper.Fixedclickbug.0.2.4Fixed bug.0.2.3Added ext argument toimg(alt and ext are both optional.)0.2.2Added new propertyalertChangedimg’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.