Find elements
=============

You can to use origin api from selenium lib but we offer to do it easy.


Easy query by css selector
--------------------------

You can to use tag name as method name and tag attributes as keyword arguments.
If you want to use class attribute or id or another attributes which has conflict
with python's global names so you can to use "_" as prefix or suffix for that.


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def function_example(case, browser):
        browser.go_to('http://google.com')

        search = browser.input(name='q').first()
        search.set('python')
        button = browser.button(name='btnG').first()
        button.click()


    if __name__ == '__main__':
        seismograph.main()


Query object
------------

You can to create query separately of browser and to get result by request of.


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    def get_some_element(browser):
        query = selenium.query(selenium.query.DIV, _class='some-class')
        result = query(browser)
        result.wait()
        return result.first()


    @suite.register
    def example(case, browser):
        some_element = get_some_element(browser)
        # do something


Contains marker
---------------

When value of attribute contains value


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.contains('some-class'),
        ).first()


Not equal marker
----------------

When value of attribute not equal value


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.not_equal('some-class'),
        ).first()


Endswith marker
---------------

When value of attribute ends with value


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.endswith('some-class'),
        ).first()


Startswith marker
-----------------

When value of attribute starts with value


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.startswith('some-class'),
        ).first()


Not contains marker
-------------------

When value of attribute does not contains value


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.not_contains('some-class'),
        ).first()



Expression
----------

When require expression for value of attribute


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def example(case, browser):
        browser.go_to('http://some.address')

        some_element = browser.div(
            _class=selenium.query.expression(
                selenium.query.contains('some-class'),
                selenium.query.not_contains('hide'),
            )
        ).first()


Chain of query
--------------

If you want to follow into DOM tree then you can to do it like


.. code-block:: python

    import seismograph
    from seismograph.ext import selenium


    suite = selenium.Suite(__name__)


    @suite.register
    def function_example(case, browser):
        browser.go_to('http://some.address')

        element = browser.div(name='some_name').first()
        second_element = element.li(_class='some-class').first()


or like


.. code-block:: python

    @suite.register
    def function_example(case, browser):
        browser.go_to('http://some.address')

        second_element = browser.div(name='some_name').li(_class='some-class').first()


Css query result api
--------------------

.. autoclass:: seismograph.ext.selenium.query.QueryResult
    :members:
    :exclude-members: __dict__, __weakref__
    :private-members:
    :special-members: