- naming changes:
- tbd
- removed deprecated things:
selene.tools
(useselene.browser
instead)SeleneElement#
insist
(useshould
instead)insist_not
(useshould_not
instead)
SeleneCollection#
insist
(useshould
instead)insist_not
(useshould_not
instead)filterBy
(usefiltered_by
instead)findBy
(useelement_by
instead)find
(useelement_by
instead)
- deprecated (will produce
DeprecationWarning
):SeleneCollection#
filtered
(usefiltered_by
instead)ss
(usefiltered_by
instead)s
(useelement_by
instead)
- marked as "considering to deprecate" (will produce
FutureWarning
):SeleneCollection#
filter
(consider usingfiltered_by
instead)filter_by
(consider usingfiltered_by
instead)find_by
(consider usingelement_by
instead)
- new features:
- #15: added
browser.title()
shortcut forbrowser.driver().title
- #15: added
- naming changes:
- browser.visit() renamed to browser.open_url()
- config.maximize_windows -> config.start_maximized
- config.screenshot_folder -> config.reports_folder
- improvements
- screenshot link is now clickable in console output
- bug fixes:
- #124: If by.xpath contains utf8 symbols and not condition get UnicodeEncodeError: 'ascii'
- planned to remove in next version:
- selene.tools
- #103: NEW API entry points
- now all main selene API is available via single wildcard import:
from selene.api import *
- you can use the "old direct imports way" but at least until 1.0 release "the new way" will result in more stable API. We may move modules between packages, but your new way imports remain stable. See more explantains in issue description #103
- read Quick Start section in README.MD for more details.
- now all main selene API is available via single wildcard import:
- UPCOMING BREAKING CHANGES:
- deprecated selene.config.app_host, use
selene.config.base_url
instead- selene.config.app_host still works but will be removed in next versions
- #101: deprecated selene.tools, use selene.browser and selene.support.jquery_style_selectors instead or just the "new way imports from #103"
- deprecated selene.config.app_host, use
- new features
- #51: added ability to configure selene via passing/setting system variables
- skipped:)
- new features added
- #76: config.maximize_window (set to True by default)
- #68: config.hold_browser_open (set to False by default)
- #78: config.desired_capabilities (set to None by default)
- #92: selene.tools.latest_screenshot() (returns NoneObject if no screenshot have been added yet)
- #85: SeleneElement#context_click()
- #77: SeleneElement#scroll_to() (not needed in all cases, but may be usefull in some browsers sometimes...)
- #75: support for phantomjs browser
- conditions: url, url_containing, title_containing
- refactored aliases implementation from selene.support.conditions.have
- now they are implemented as method definitions giving better hints during autocomplete
- project infrastracture
- #84: improved travis job: added archiving build artifacts (test results)
- fixed #71: weird paths of screenshots for windows
- updated #56: now selene should work with python 3 (but feature is not fully tested)
- added selene.tools.wait_to to wait for driver conditions like have.title, have.js_returned_true
- added Title and JsReturnedTrue webdriver conditions
- added selene.tools.execute_script
- refactored conditions implementation
- broken support for python 3 (will be fixed in next versions)
- added automatic screenshots on failed "should" methods
- by default screenshots are created in {user_home}/.selene/screenshots/{id_of_current_tests_run}
- by default the "previous run" screenshots are not cleared on "next run"
- screenshot can be created manually by
selene.tools.take_screenshot
- improvements:
- error messages are cleaner
- todo: still lacks proper test coverage of all cases...
- error messages are cleaner
- internal
- refactored wait_for implementation, made it cleaner
- todo: still need to refactor condition implementation
- refactored wait_for implementation, made it cleaner
- new features:
- automatic driver management (thanks to PR from @SergeyPirogov)
- no more need to
set_driver
, just use any command fromselene.tools
, likevisit
,s
, orss
and driver will be opened automatically, and then closed automatically (unless you decide to set it manually viaset_driver
) - includes automatic installation of needed drivers via webdriver_manager
- no more need to
- automatic driver management (thanks to PR from @SergeyPirogov)
- internal
- improved test coverage
- added "given-helpers" for preconditions for atomic tests
- completely refactored implementation to be more structural and solid
- on the way found non-stable behavior of old implementation and fixed it
- improved test coverage
- new features:
- object oriented paradigm is now supported in context of webdriver usage
- Don't like "static" s, ss helpers (from selene.tools module) using global driver instance set by set_driver(...)?
- now you can use driver.element, driver.all correspondingly
- where driver = SeleneDriver.wrap(FirefoxDriver()), etc.
- SeleneDriver has almost the same interface as WebDriver, but with additional methods
- so you can do everything you can do with raw selenium when needed
- additional "helpers" from selene.support package
- more readable and convenient API to retrieve conditions via selene.support.(be|have)
- e.g.
s('#element').should(have.text('foo'))
- e.g.
- more readable and convenient API to retrieve by locators via selene.support.by
- e.g.
s(by.text('foo')).click()
s('#element').element(by.be_following_sibling).click()
- e.g.
- SeleneElement relative search shortcut-methods:
s('#element').parent_element.click()
s('#element').following_sibling.click()
s('#element').first_child.click()
- more readable and convenient API to retrieve conditions via selene.support.(be|have)
- object oriented paradigm is now supported in context of webdriver usage
- breaking changes:
- removed out of the box but overcomplicated Widgets support via extending SElement
- you still can create reusable Widgets in much simpler way
- see more explanation in #17
- you still can create reusable Widgets in much simpler way
- removed access by config.driver to the driver instance that was set by set_driver(...) from selene.tools
- it's mandatory to use get_driver(...) from selene.tools for this
- removed out of the box but overcomplicated Widgets support via extending SElement
- locked the selenium version to 2.53.1
- fixed encoding issues when working with text of elements in conditions
- added bys.by_name
- fixed python3 support
- fixed the is_displayed method - now it contains implicit wait for "exist in DOM" instead of "visible"
- added ss(".element", of=Task) syntax in addition to ss(".element").of(Task)
- removed "general interceptor of all unknown methods" SElement's base class (actually commented it in code:)
- refactored lazy inner collection classes to use extend in init and not use SElementsCollectionWrapper (removed the latter and SElementWrapper)
- refactored: removed unnecessary extend from "inner" selement collections (it is needed obviously only for "inner" selement collection element classes)
- added alias methods:
insist_not = assure_not
should_not = assure_not
should_not_be = assure_not
should_not_have = assure_not
- removed stopit from dependencies
- optimized element actions (now they wait for visibility only if first try failed)
- now selene is as fast as selenium with research of elements before any action. Manual cashing is also available when "raw selenium" speed is needed (semi-automatic customizable cashing will be added later)
- optimized SElementsCollection#find implementation - now it returns first match, not filter everything and then get first among all matches
- mapped all webelement methods to selement (almost all) - now autocompletion works fully for selement
- optimized logic of "inner lazy elements" of collection, removed a bit of magic from it.
- big refactoring
- removed currently unstable things
- automatic driver management (Firefox)
- so now management is manual but you can use any driver you want (Firefox, Chrome, etc...)
- screenshooting
- automatic driver management (Firefox)
- removed "too complicated" things
- automatic Loading of widgets
- so now no any difference between insist, assure, should
- automatic Loading of widgets
- added aliases (maybe too much... some may be marked as deprecated in future)
- insist, assure, should, should_be, should_have
- find more in elements.py, etc.
- added more overloaded element methods... removed some magic in implementation, still needed to simplify more...
- added tests, still not enough though
- added support of other locators (in addition to css)
- removed currently unstable things
...
...
...
...