manen 0.3.0.dev2__tar.gz → 0.3.0.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/PKG-INFO +13 -11
  2. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/README.md +12 -10
  3. manen-0.3.0.dev4/docs/source/changelog.rst +145 -0
  4. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/index.rst +6 -5
  5. manen-0.3.0.dev4/docs/source/manen/manen.page_object_model.config.rst +8 -0
  6. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.page_object_model.rst +1 -0
  7. manen-0.3.0.dev4/docs/source/user_guide/page_object_model.ipynb +598 -0
  8. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/__init__.py +1 -1
  9. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/browser.py +2 -3
  10. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/page_object_model/__init__.py +9 -9
  11. manen-0.3.0.dev2/manen/page_object_model/dom.py → manen-0.3.0.dev4/manen/page_object_model/config.py +5 -14
  12. manen-0.3.0.dev4/manen/page_object_model/dom.py +14 -0
  13. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/page_object_model/element.py +3 -2
  14. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/page_object_model/webarea.py +1 -1
  15. manen-0.3.0.dev2/CHANGELOG.md +0 -69
  16. manen-0.3.0.dev2/docs/source/changelog.rst +0 -108
  17. manen-0.3.0.dev2/docs/source/user_guide/page_object_model.ipynb +0 -594
  18. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/.github/workflows/build-documentation.yml +0 -0
  19. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/.github/workflows/deploy-package.yml +0 -0
  20. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/.github/workflows/test-package.yml +0 -0
  21. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/.gitignore +0 -0
  22. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/.rstcheck.cfg +0 -0
  23. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/LICENSE +0 -0
  24. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/Makefile +0 -0
  25. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/assets/screenshot_pypi_home.png +0 -0
  26. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/assets/screenshot_pypi_search_results.png +0 -0
  27. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/make.bat +0 -0
  28. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/_static/favicon.png +0 -0
  29. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/_static/manen_logo.png +0 -0
  30. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/_static/manen_logo_xs.png +0 -0
  31. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/_static/theme_override.css +0 -0
  32. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/about.rst +0 -0
  33. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/conf.py +0 -0
  34. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/contributing.rst +0 -0
  35. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/installation.rst +0 -0
  36. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.browser.rst +0 -0
  37. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.exceptions.rst +0 -0
  38. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.finder.rst +0 -0
  39. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.helpers.rst +0 -0
  40. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.page_object_model.dom.rst +0 -0
  41. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.page_object_model.element.rst +0 -0
  42. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.page_object_model.webarea.rst +0 -0
  43. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/manen/manen.rst +0 -0
  44. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/user_guide/browser.ipynb +0 -0
  45. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/user_guide/dom_exploration.ipynb +0 -0
  46. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/docs/source/user_guide.rst +0 -0
  47. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/exceptions.py +0 -0
  48. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/finder.py +0 -0
  49. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/helpers.py +0 -0
  50. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/manen/typing.py +0 -0
  51. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/pyproject.toml +0 -0
  52. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/requirements-dev.lock +0 -0
  53. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/requirements.lock +0 -0
  54. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/__init__.py +0 -0
  55. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/assets/page.yaml +0 -0
  56. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/assets/page_test_basic.jinja.html +0 -0
  57. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/test_finder.py +0 -0
  58. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/test_helpers.py +0 -0
  59. {manen-0.3.0.dev2 → manen-0.3.0.dev4}/tests/test_imports.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: manen
3
- Version: 0.3.0.dev2
3
+ Version: 0.3.0.dev4
4
4
  Summary: An implementation of the Page Object Model design pattern, and other utilities for web scraping and automation.
5
5
  Project-URL: Changes, https://kodaho.github.io/manen/changelog.html
6
6
  Project-URL: Documentation, https://kodaho.github.io/manen/
@@ -59,7 +59,7 @@ features, you can find:
59
59
 
60
60
  - an implementation of the [Page Object Model](https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/)
61
61
  design pattern
62
- - a class which improves the operability of a Selenium's Webdriver
62
+ - a class which improves the operability of a Selenium's WebDriver
63
63
  - a function to easily find and isolate DOM elements inside a Selenium page
64
64
 
65
65
  This package aims to provide you the tools to write more concise, flexible and powerful code
@@ -114,28 +114,30 @@ attributes. Note the whole page object model design pattern is implemented with
114
114
  like in `Pydantic` model).
115
115
 
116
116
  ```python
117
- from manen.page_object_model.webarea import Page, WebArea
118
117
  from manen.page_object_model import dom
118
+ from manen.page_object_model.config import CSS, XPath
119
+ from manen.page_object_model.webarea import Page, WebArea
120
+
119
121
 
120
122
  class HomePage(Page):
121
- query: Annotated[dom.Input, dom.CSS("input[name='q']")]
123
+ query: Annotated[dom.Input, CSS("input[name='q']")]
122
124
 
123
125
 
124
126
  class SearchResultPage(Page):
125
127
  class Result(WebArea):
126
- name: Annotated[str, dom.CSS("h3 span.package-snippet__name")]
127
- version: Annotated[str, dom.CSS("h3 span.package-snippet__version")]
128
- link: Annotated[dom.HRef, dom.CSS("a.package-snippet")]
129
- description: Annotated[str, dom.CSS("p.package-snippet__description")]
130
- release_date: Annotated[datetime, dom.CSS("span.package-snippet__created")]
128
+ name: Annotated[str, CSS("h3 span.package-snippet__name")]
129
+ version: Annotated[str, CSS("h3 span.package-snippet__version")]
130
+ link: Annotated[dom.HRef, CSS("a.package-snippet")]
131
+ description: Annotated[str, CSS("p.package-snippet__description")]
132
+ release_date: Annotated[datetime, CSS("span.package-snippet__created")]
131
133
 
132
134
  nb_results: Annotated[
133
135
  int,
134
- dom.XPath("//*[@id='content']//form/div[1]/div[1]/p/strong"),
136
+ XPath("//*[@id='content']//form/div[1]/div[1]/p/strong"),
135
137
  ]
136
138
  results: Annotated[
137
139
  list[Result],
138
- dom.CSS("ul[aria-label='Search results'] li"),
140
+ CSS("ul[aria-label='Search results'] li"),
139
141
  ]
140
142
  ```
141
143
 
@@ -34,7 +34,7 @@ features, you can find:
34
34
 
35
35
  - an implementation of the [Page Object Model](https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/)
36
36
  design pattern
37
- - a class which improves the operability of a Selenium's Webdriver
37
+ - a class which improves the operability of a Selenium's WebDriver
38
38
  - a function to easily find and isolate DOM elements inside a Selenium page
39
39
 
40
40
  This package aims to provide you the tools to write more concise, flexible and powerful code
@@ -89,28 +89,30 @@ attributes. Note the whole page object model design pattern is implemented with
89
89
  like in `Pydantic` model).
90
90
 
91
91
  ```python
92
- from manen.page_object_model.webarea import Page, WebArea
93
92
  from manen.page_object_model import dom
93
+ from manen.page_object_model.config import CSS, XPath
94
+ from manen.page_object_model.webarea import Page, WebArea
95
+
94
96
 
95
97
  class HomePage(Page):
96
- query: Annotated[dom.Input, dom.CSS("input[name='q']")]
98
+ query: Annotated[dom.Input, CSS("input[name='q']")]
97
99
 
98
100
 
99
101
  class SearchResultPage(Page):
100
102
  class Result(WebArea):
101
- name: Annotated[str, dom.CSS("h3 span.package-snippet__name")]
102
- version: Annotated[str, dom.CSS("h3 span.package-snippet__version")]
103
- link: Annotated[dom.HRef, dom.CSS("a.package-snippet")]
104
- description: Annotated[str, dom.CSS("p.package-snippet__description")]
105
- release_date: Annotated[datetime, dom.CSS("span.package-snippet__created")]
103
+ name: Annotated[str, CSS("h3 span.package-snippet__name")]
104
+ version: Annotated[str, CSS("h3 span.package-snippet__version")]
105
+ link: Annotated[dom.HRef, CSS("a.package-snippet")]
106
+ description: Annotated[str, CSS("p.package-snippet__description")]
107
+ release_date: Annotated[datetime, CSS("span.package-snippet__created")]
106
108
 
107
109
  nb_results: Annotated[
108
110
  int,
109
- dom.XPath("//*[@id='content']//form/div[1]/div[1]/p/strong"),
111
+ XPath("//*[@id='content']//form/div[1]/div[1]/p/strong"),
110
112
  ]
111
113
  results: Annotated[
112
114
  list[Result],
113
- dom.CSS("ul[aria-label='Search results'] li"),
115
+ CSS("ul[aria-label='Search results'] li"),
114
116
  ]
115
117
  ```
116
118
 
@@ -0,0 +1,145 @@
1
+ Changelog
2
+ =========
3
+
4
+ .. |topic| raw:: html
5
+
6
+ <span style="display: inline-block; width: 110px; font-size:85%; font-weight: 600;">Topic</span> <span style="font-size:85%">
7
+
8
+ .. |released_on| raw:: html
9
+
10
+ <span style="display: inline-block; width: 110px; font-size:85%; font-weight: 600;">Release date</span> <span style="font-size:85%">
11
+
12
+ .. |end| raw:: html
13
+
14
+ </span>
15
+
16
+
17
+ 0.3.0
18
+ -----
19
+
20
+ |topic| Page object model implementation revamp & other major changes |end|
21
+
22
+ |released_on| (unreleased) |end|
23
+
24
+ .. warning::
25
+
26
+ Even if it's a minor release, this version represents a major change for the project; the
27
+ package has been mostly rewritten in order to implement the page object model design pattern in
28
+ a more efficient way (using type annotation).
29
+
30
+ Besides, some functionalities have been removed with the aim of limiting the number of features
31
+ during the beta phase.
32
+
33
+ All previous versions should be considered as deprecated.
34
+
35
+
36
+ Changed
37
+ ^^^^^^^
38
+ - The module :py:mod:`~manen.page_object_model` has been rewritten to use type annotation instead
39
+ of ``Element``. Note that some elements like select or radio button haven't been implemented in
40
+ this new version yet (but will be in the future).
41
+ - Most of the documentation pages have been rewritten and improved.
42
+ - Most modules have better typing annotations and documentation. Besides, the code has been
43
+ improved to be more "Pythonic".
44
+ - Manen no longer has optional dependencies (which were in fact development dependencies).
45
+ - The minimal version of Python required is now 3.10.
46
+ - Internally, Manen is now using `rye <https://rye.astral.sh/guide/>`_ as project manager, and
47
+ `ruff <https://docs.astral.sh/ruff/>`_ for the linting and formatting.
48
+
49
+ Removed
50
+ ^^^^^^^
51
+ - The module ``manen.resource`` and everything related (like the CLI) have been removed. Indeed,
52
+ the `official Selenium manager <https://www.selenium.dev/documentation/selenium_manager/>`_
53
+ (available as a CLI tool and in recent versions of Python bindings for Selenium) provides the
54
+ same functionalities.
55
+ - ``manen.browser.BraveBrowser`` has been removed because it had a dependency on the module
56
+ ``manen.resource``. Besides, it was considered as not enough tested internally to make it
57
+ available publicly.
58
+
59
+ |
60
+
61
+ 0.2.0
62
+ -----
63
+
64
+ |topic| Rename some classes in :py:mod:`~manen.page_object_model` and improve CLI |end|
65
+
66
+ |released_on| 2022-02-19 |end|
67
+
68
+ Added
69
+ ^^^^^
70
+ - Specify link to changelog in documentation in package metadata.
71
+ - Introduce new options in ``manen driver download`` to set the specifications of the drivers
72
+ to be downloaded directly from the command line.
73
+ - Add exhaustibility in documentation of :py:mod:`~manen.page_object_model` to describe
74
+ private/special methods and classes other than the ones in ``__all__``.
75
+
76
+ Changed
77
+ ^^^^^^^
78
+
79
+ - Improve CLI command to download drivers executable (now launched with ``manen driver download``).
80
+ - Rename :py:class:`~manen.page_object_model.DateTimeElement` (previously ``DatetimeElement``).
81
+ - Rename :py:class:`~manen.page_object_model.DOMAccessor` (previously ``DomAccessor``).
82
+
83
+ Fixed
84
+ ^^^^^
85
+ - Fix link to notebooks in the info section of :ref:`User Guide`
86
+
87
+ |
88
+
89
+ 0.1.2
90
+ -----
91
+
92
+ |topic| Fix bug in the download workflow of the CLI |end|
93
+
94
+ |released_on| 2022-02-19 |end|
95
+
96
+ Fixed
97
+ ^^^^^
98
+
99
+ - Fix a ``TypeError`` in the download workflow (variable wrongly named).
100
+
101
+ |
102
+
103
+ 0.1.1
104
+ -----
105
+
106
+ |topic| Mainly documentation improvements |end|
107
+
108
+ |released_on| 2022-02-12 |end|
109
+
110
+ Changed
111
+ ^^^^^^^
112
+
113
+ - Make documentation publicly available under
114
+ `kodaho.github.io/manen <https://kodaho.github.io/manen/>`_.
115
+ - Complete README page.
116
+ - Add the section `About the project` in the documentation (moved from home page).
117
+ - Complete user guides.
118
+ - Rewording and reformatting of several sections.
119
+
120
+ |
121
+
122
+ 0.1.0
123
+ -----
124
+
125
+ |topic| First release of the package |end|
126
+
127
+ |released_on| 2022-01-31 |end|
128
+
129
+ Added
130
+ ^^^^^
131
+
132
+ - :py:func:`~manen.finder.find` allows to easily get element(s) in a WebDriver
133
+ page. This function support several very different use cases, thanks to several
134
+ arguments that can be passed to the function.
135
+ - :py:mod:`~manen.resource` is a module to easily interact with all the assets
136
+ needed by Selenium. It allows for example to download the drivers, executable
137
+ required to launch a WebDriver.
138
+ - :py:mod:`~manen.browser` defined :py:class:`~manen.browser.ChromeBrowser`
139
+ and :py:class:`~manen.browser.BraveBrowser`, an enhanced Selenium WebDriver.
140
+ - :py:mod:`~manen.page_object_model` is the implementation of `page object
141
+ model <https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/>`_
142
+ described in Selenium documentation. Thanks to that, you can describe and
143
+ interact with the DOM structure through Python classes.
144
+ - A :py:mod:`~manen.cli` is shipped with the initial release in order to download
145
+ drivers files.
@@ -28,17 +28,18 @@ with and without Manen:
28
28
  from selenium.webdriver.chrome.webdriver import WebDriver
29
29
 
30
30
  from manen.page_object_model import dom
31
+ from manen.page_object_model.config import CSS, Default, Wait, XPath
31
32
  from manen.page_object_model.webarea import Page, WebArea
32
33
 
33
34
 
34
35
  class BlogPage(Page):
35
36
  class Article(WebArea):
36
- title: Annotated[str, dom.XPath("//h1")]
37
- n_likes: Annotated[int, dom.CSS("span.n_likes")]
38
- tags: Annotated[list[str], dom.CSS("span.tag"), dom.Default([])]
39
- updated_at: Annotated[datetime, dom.CSS("span.updated_at")]
37
+ title: Annotated[str, XPath("//h1")]
38
+ n_likes: Annotated[int, CSS("span.n_likes")]
39
+ tags: Annotated[list[str], CSS("span.tag"), Default([])]
40
+ updated_at: Annotated[datetime, CSS("span.updated_at")]
40
41
 
41
- articles: Annotated[list[Article], dom.CSS('div.article'), dom.Wait(3)]
42
+ articles: Annotated[list[Article], CSS('div.article'), Wait(3)]
42
43
 
43
44
 
44
45
  driver = WebDriver()
@@ -0,0 +1,8 @@
1
+ :py:mod:`~manen.page_object_model.config`
2
+ =========================================
3
+
4
+ .. automodule:: manen.page_object_model.config
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
8
+ :ignore-module-all:
@@ -14,6 +14,7 @@
14
14
  :maxdepth: 1
15
15
  :titlesonly:
16
16
 
17
+ manen.page_object_model.config
17
18
  manen.page_object_model.dom
18
19
  manen.page_object_model.element
19
20
  manen.page_object_model.webarea