easyium 2.0.0
easy use of selenium and appium
License: Apache
Keywords: selenium appium test testing framework automation

=======
easyium
=======
.. image:: https://img.shields.io/pypi/v/easyium.svg
    :target: https://pypi.python.org/pypi/easyium

.. image:: https://img.shields.io/pypi/pyversions/easyium.svg
    :target: https://pypi.python.org/pypi/easyium

easyium is an easy-to-use wrapper for selenium&appium and it can make you more focus on business not the element.

Find the latest version on github: https://github.com/KarlGong/easyium-python or PyPI: https://pypi.python.org/pypi/easyium

Advantages
----------
- easyium provides unified apis to test on browsers and devices.

- easyium adds a global implicit wait for elements and you rarely need to consider waiting a element to be visible or existing.

- easyium introduces a simple and clear way to build model objects for UI.

- easyium has a better performance, the element will lazily load WebElement reference and reuses it if necessary.

- easyium provides easy-to-use wait method for element. e.g., my_element.wait_for().not_().exists()

- easyium provides a simple way to define a locator. e.g., use ``"xpath=.//mytag"`` instead of ``By.XPATH, ".//mytag"``

- easyium provides a mechanism to avoid StaleElementReferenceException.

Installation
------------
The last stable release is available on PyPI and can be installed with ``pip``.

::

    $ pip install easyium

Glossary
--------
WebDriver
~~~~~~~~~
It is a wrapper for selenium&appium's web driver. You can create a new instance by providing web driver type.

DynamicElement
~~~~~~~~~~~~~~
DynamicElement is one type of Element in easyium. It refers to the element which is dynamic relative to its parent.

You can get it only by calling ``WebDriver.find_element(locator)`` or ``Element.find_element(locator)`` and you can not create a new instance by yourself.

StaticElement
~~~~~~~~~~~~~
StaticElement is the other type of Element in easyium. It refers to the element which is static relative to its parent.

You can create a new instance by providing parent and locator.

Example
-------
For detailed examples, please refer to the ``examples`` folder in source distribution or visit https://github.com/KarlGong/easyium-python/tree/master/examples

Contact me
----------
For information and suggestions you can contact me at karl.gong@outlook.com

Change Log
----------
2.0.0 (compared to 1.3.8)

- Retire python 2.x

- Support selenium==4.1.0 and appium==2.1.1

1.3.8 (compared to 1.3.7)

- Freeze selenium and appium version.

1.3.7 (compared to 1.3.6)

- Add web_driver.get_viewport_size, web_driver.set_viewport_size

1.3.6 (compared to 1.3.5)

- Support appium>=0.46

1.3.5 (compared to 1.3.4)

- Optimize condition in Context.find_element(s).

1.3.4 (compared to 1.3.3)

- Fix InvalidElementStateException is not caught.

1.3.3 (compared to 1.3.2)

- Fix Element.set_selection_range() issue.

1.3.2 (compared to 1.3.1)

- Handle ElementNotInteractableException in element actions.

1.3.1 (compared to 1.3.0)

- Support selenium>=3.141.0 and appium>=0.30

- Implement double_click and context_click for safari.

1.3.0 (compared to 1.2.10)

- Support appium>=0.27 and add the new actions.

- Shorten the locator name. e.g., accessibility_id -> acc_id

- Add waiting for WebDriver.switch_to_context.

1.2.10 (compared to 1.2.9)

- Support selenium>=3.13.0 and appium>=0.26

1.2.9 (compared to 1.2.8)

- Support selenium>=3.8.0 and appium>=0.25

1.2.8 (compared to 1.2.7)

- Fix desired_capabilities issue.

1.2.7 (compared to 1.2.6)

- Fix the string format of web driver.

1.2.6 (compared to 1.2.5)

- Add Remote web driver back.

- Support selenium>=3.6.0

- Remove Android, Ios driver.

1.2.5 (compared to 1.2.4)

- Enhance element actions.

1.2.4 (compared to 1.2.3)

- Support selenium>=3.4.0

- Add Remote web driver.

1.2.3 (compared to 1.2.2)

- Support selenium>=3.0.2, appium>=0.24

- Add focus() for element.

1.2.2 (compared to 1.2.1)

- Add waiting for WebDriver.switch_to_frame().

- Add WebDriver.wait_for().reloaded().

1.2.1 (compared to 1.2.0)

- Remove at_least argument in context.find_elements.

- Support find element(s) condition in Context.find_element(s).

1.2.0 (compared to 1.1.5)

- Add WebDriver Ie, Firefox, Chrome, Opera, Safari, Edge, PhantomJS, Ios and Android.

- Add scroll_to() in WebDriver.

- Add has_child() in Context.

- Add get_center() in Element.

- Add wait_for_server_started() in utils.

- Support WebDriver.wait_for().text_equals(), WebDriver.wait_for().activity_present().

- Support with statement for WebDriver.

- Support at_least in Context.find_elements().

- Support drag_and_drop_to_with_offset, drag_and_drop_by_offset for mobile.

- Remove pre and post wait time.

1.1.5 (compared to 1.1.4)

- Add scroll(), switch_to_new_window() to WebDriver.

- Add scroll(), scroll_into_view() to Element.

- Raise InvalidLocatorException when the locator is invalid.

1.1.4 (compared to 1.1.3)

- Add get_screenshot_as_xxx() to Element.

1.1.3 (compared to 1.1.2)

- Add docstring for apis.

- Add post wait time for waiter.

1.1.2 (compared to 1.1.1)

- Add pre wait time for waiter.

1.1.1 (compared to 1.1.0)

- Optimize the waiter.

- Add blur() for class Element.

1.1.0 (compared to 1.0.0)

- Refactor the waiter.

1.0.0

- Baby easyium.