Interacting with elements in the page

Get value of an element

In order to retrieve an element’s value, use the value property:

browser.find_by_css('h1').first.value

or

element = browser.find_by_css('h1').first
element.value

Clicking buttons

You can click in buttons. Splinter follows any redirects, and submits forms associated with buttons.

browser.find_by_name('send').first.click()

Interacting with forms

browser.fill('query', 'my name')
browser.attach_file('file', '/path/to/file/somefile.jpg')
browser.choose('some-radio', 'radio-value')
browser.check('some-check')
browser.uncheck('some-check')
browser.select('uf', 'rj')

To trigger JavaScript events, like KeyDown or KeyUp, you can use the type method.

browser.type('type', 'typing text')

If you pass the argument slowly=True to the type method you can interact with the page on every key pressed. Useful for testing field’s autocompletion (the browser will wait until next iteration to type the subsequent key).

for key in browser.type('type', 'typing slowly', slowly=True):
    pass # make some assertion here with the key object :)

You can also use type and fill methods in an element:

browser.find_by_name('name').type('Steve Jobs', slowly=True)
browser.find_by_css('.city').fill('San Francisco')

Verifying if element is visible or invisible

To check if an element is visible or invisible, use the visible property. For instance:

browser.find_by_css('h1').first.visible

will be True if the element is visible, or False if it is invisible.

Verifying if element has a className

To check if an element has a className, use the has_class method. For instance:

browser.find_by_css('.content').first.has_class('content')

Interacting with elements through a ElementList object

Don’t you like to always use first when selecting an element for clicking, for example:

browser.find_by_css('a.my-website').first.click()

You can invoke any Element method on ElementList and it will be proxied to the first element of the list. So the two lines below are equivalent:

assert browser.find_by_css('a.banner').first.visible
assert browser.find_by_css('a.banner').visible

Get the shadow root of an element

The shadow_root property provides access to the ShadowRootElement object. ShadowRootElement implements the find_by_<x> methods.

shadow_root = browser.find_by_css('a.my-website').first.shadow_root
elements = shadow_root.find_by_css('.my-elements')