robo_appian 0.0.3__py3-none-any.whl → 0.0.4__py3-none-any.whl
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.
Potentially problematic release.
This version of robo_appian might be problematic. Click here for more details.
- robo_appian/utils/__init__.py +1 -0
- robo_appian/utils/components/ButtonUtils.pyc +0 -0
- robo_appian/utils/components/ComponentUtils.pyc +0 -0
- robo_appian/utils/components/DateUtils.pyc +0 -0
- robo_appian/utils/components/DropdownUtils.pyc +0 -0
- robo_appian/utils/components/InputUtils.pyc +0 -0
- robo_appian/utils/components/LabelUtils.pyc +0 -0
- robo_appian/utils/components/LinkUtils.pyc +0 -0
- robo_appian/utils/components/TabUtils.pyc +0 -0
- robo_appian/utils/components/TableUtils.pyc +0 -0
- robo_appian/utils/components/__init__.py +1 -0
- robo_appian/utils/controllers/ComponentDriver.pyc +0 -0
- robo_appian/utils/controllers/__init__.py +1 -0
- robo_appian/utils/exceptions/MyCustomError.pyc +0 -0
- robo_appian/utils/exceptions/__init__.py +1 -0
- robo_appian-0.0.4.dist-info/METADATA +163 -0
- robo_appian-0.0.4.dist-info/RECORD +37 -0
- {robo_appian-0.0.3.dist-info → robo_appian-0.0.4.dist-info}/WHEEL +2 -1
- robo_appian-0.0.4.dist-info/top_level.txt +2 -0
- robo_appian_source_backup/__init__.py +23 -0
- robo_appian_source_backup/utils/__init__.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/DropdownUtils.py +8 -8
- {robo_appian → robo_appian_source_backup}/utils/components/InputUtils.py +8 -4
- robo_appian_source_backup/utils/components/__init__.py +0 -0
- robo_appian_source_backup/utils/controllers/__init__.py +0 -0
- robo_appian_source_backup/utils/exceptions/__init__.py +0 -0
- robo_appian-0.0.3.dist-info/METADATA +0 -91
- robo_appian-0.0.3.dist-info/RECORD +0 -20
- {robo_appian-0.0.3.dist-info → robo_appian-0.0.4.dist-info/licenses}/LICENSE +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/ButtonUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/ComponentUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/DateUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/LabelUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/LinkUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/TabUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/components/TableUtils.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/controllers/ComponentDriver.py +0 -0
- {robo_appian → robo_appian_source_backup}/utils/exceptions/MyCustomError.py +0 -0
robo_appian/utils/__init__.py
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Bytecode package
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Bytecode package
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Bytecode package
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Bytecode package
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: robo_appian
|
|
3
|
+
Version: 0.0.4
|
|
4
|
+
Summary: Selenium-based automation utilities for Appian applications
|
|
5
|
+
Home-page: https://github.com/yourusername/robo_appian
|
|
6
|
+
Author: Your Name
|
|
7
|
+
Author-email: your.email@example.com
|
|
8
|
+
Project-URL: Bug Reports, https://github.com/yourusername/robo_appian/issues
|
|
9
|
+
Project-URL: Source, https://github.com/yourusername/robo_appian
|
|
10
|
+
Project-URL: Documentation, https://robo-appian.readthedocs.io/
|
|
11
|
+
Keywords: selenium,automation,testing,appian,ui
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Topic :: Software Development :: Testing
|
|
15
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: selenium>=4.34.0
|
|
27
|
+
Requires-Dist: requests>=2.25.0
|
|
28
|
+
Requires-Dist: numpy>=1.21.0
|
|
29
|
+
Dynamic: author
|
|
30
|
+
Dynamic: author-email
|
|
31
|
+
Dynamic: classifier
|
|
32
|
+
Dynamic: description
|
|
33
|
+
Dynamic: description-content-type
|
|
34
|
+
Dynamic: home-page
|
|
35
|
+
Dynamic: keywords
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
Dynamic: project-url
|
|
38
|
+
Dynamic: requires-dist
|
|
39
|
+
Dynamic: requires-python
|
|
40
|
+
Dynamic: summary
|
|
41
|
+
|
|
42
|
+
# Robo Appian
|
|
43
|
+
|
|
44
|
+
**Automate your Appian code testing with Python. Boost quality, save time.**
|
|
45
|
+
|
|
46
|
+
[](https://badge.fury.io/py/robo-appian)
|
|
47
|
+
[](https://www.python.org/downloads/)
|
|
48
|
+
[](https://dinilmithra.github.io/robo_appian/)
|
|
49
|
+
|
|
50
|
+
## 🚀 Quick Start
|
|
51
|
+
|
|
52
|
+
### Installation
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pip install robo-appian
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Basic Usage
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from selenium import webdriver
|
|
62
|
+
from selenium.webdriver.support.ui import WebDriverWait
|
|
63
|
+
from robo_appian import ButtonUtils, InputUtils, TableUtils
|
|
64
|
+
|
|
65
|
+
# Setup your driver
|
|
66
|
+
driver = webdriver.Chrome()
|
|
67
|
+
wait = WebDriverWait(driver, 10)
|
|
68
|
+
|
|
69
|
+
# Interact with Appian components
|
|
70
|
+
ButtonUtils.click(wait, "Submit")
|
|
71
|
+
InputUtils.set_text(wait, "Username", "john.doe")
|
|
72
|
+
TableUtils.click_cell_link(wait, "Actions", 1, "Edit")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 📚 Features
|
|
76
|
+
|
|
77
|
+
### Components
|
|
78
|
+
- **ButtonUtils**: Find and click buttons
|
|
79
|
+
- **DateUtils**: Interact with date fields and date pickers
|
|
80
|
+
- **DropdownUtils**: Interact with dropdown/select components
|
|
81
|
+
- **InputUtils**: Interact with input fields and text areas
|
|
82
|
+
- **LabelUtils**: Find and interact with labels
|
|
83
|
+
- **LinkUtils**: Click links and navigate
|
|
84
|
+
- **TableUtils**: Interact with tables and grids
|
|
85
|
+
- **TabUtils**: Switch between tabs
|
|
86
|
+
- **ComponentUtils**: General component utilities
|
|
87
|
+
|
|
88
|
+
### Controllers
|
|
89
|
+
- **ComponentDriver**: High-level interface for component interaction
|
|
90
|
+
|
|
91
|
+
### Exceptions
|
|
92
|
+
- **MyCustomError**: Custom exceptions for better error handling
|
|
93
|
+
|
|
94
|
+
## 📖 Documentation
|
|
95
|
+
|
|
96
|
+
Visit our [full documentation](https://dinilmithra.github.io/robo_appian/) for:
|
|
97
|
+
- Detailed API reference
|
|
98
|
+
- Complete examples and tutorials
|
|
99
|
+
- Installation guide
|
|
100
|
+
- Best practices
|
|
101
|
+
|
|
102
|
+
## 🛠️ Requirements
|
|
103
|
+
|
|
104
|
+
- Python 3.12+
|
|
105
|
+
- Selenium WebDriver 4.34.0+
|
|
106
|
+
- Compatible web browser (Chrome, Firefox, etc.)
|
|
107
|
+
|
|
108
|
+
## 🤝 Contributing
|
|
109
|
+
|
|
110
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
111
|
+
|
|
112
|
+
## 📄 License
|
|
113
|
+
|
|
114
|
+
This project is licensed under the MIT License.
|
|
115
|
+
|
|
116
|
+
## 🔗 Links
|
|
117
|
+
|
|
118
|
+
- [Documentation](https://dinilmithra.github.io/robo_appian/)
|
|
119
|
+
- [PyPI Package](https://pypi.org/project/robo-appian/)
|
|
120
|
+
- [GitHub Repository](https://github.com/dinilmithra/robo_appian)
|
|
121
|
+
ButtonUtils, ComponentUtils, DateUtils, DropdownUtils, InputUtils,
|
|
122
|
+
LabelUtils, LinkUtils, TableUtils, TabUtils
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Example: Set a Date Value
|
|
126
|
+
DateUtils.set_date_value("date_field_id", "2023-10-01")
|
|
127
|
+
|
|
128
|
+
# Example: Click a Button
|
|
129
|
+
ButtonUtils.click_button("submit_button_id")
|
|
130
|
+
|
|
131
|
+
# Example: Select a Dropdown Value
|
|
132
|
+
DropdownUtils.select_value("dropdown_id", "Option 1")
|
|
133
|
+
|
|
134
|
+
# Example: Enter Text in an Input Field
|
|
135
|
+
InputUtils.enter_text("input_field_id", "Sample Text")
|
|
136
|
+
|
|
137
|
+
# Example: Click a Link
|
|
138
|
+
LinkUtils.click_link("link_id")
|
|
139
|
+
|
|
140
|
+
# Example: Click a Tab
|
|
141
|
+
TabUtils.click_tab("tab_id")
|
|
142
|
+
|
|
143
|
+
# Example: Get a Table Cell Value
|
|
144
|
+
TableUtils.get_cell_value("table_id", 1, 2) # Row 1, Column 2
|
|
145
|
+
|
|
146
|
+
# Example: Get a Label Value
|
|
147
|
+
LabelUtils.get_label_value("label_id")
|
|
148
|
+
|
|
149
|
+
# Example: Get a Component Value
|
|
150
|
+
ComponentUtils.get_component_value("component_id")
|
|
151
|
+
|
|
152
|
+
# Example: Use the Component Driver
|
|
153
|
+
from robo_appian.utils.controllers.ComponentDriver import ComponentDriver
|
|
154
|
+
ComponentDriver.execute(wait, "Button", "Click", "Submit", None)
|
|
155
|
+
|
|
156
|
+
## Dependencies
|
|
157
|
+
|
|
158
|
+
Python >= 3.8
|
|
159
|
+
Uses selenium
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
MIT License. See LICENSE.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
robo_appian/__init__.py,sha256=AiMpl0fcPrlwMyUH0ZRzVYAlv4WY6e225XQCMuJa0Zk,779
|
|
2
|
+
robo_appian/utils/__init__.py,sha256=GqOJu-ZZRLzA9Nby6uXo82hxkSOPW_ZxBtMCn0xgoB8,19
|
|
3
|
+
robo_appian/utils/components/ButtonUtils.pyc,sha256=J90p3zU4Q7vgklQZvLk7-4v-kosISmnyGYcFeoTiOdg,1919
|
|
4
|
+
robo_appian/utils/components/ComponentUtils.pyc,sha256=Uw3oEqCJ_8rgZpfs0hBqYJkwiaCcdJxpWtbdVSAwUiw,4579
|
|
5
|
+
robo_appian/utils/components/DateUtils.pyc,sha256=O8q1YI8elSEJJaa_rw7msop9GVSTBRF7BGFp_pD64O8,2852
|
|
6
|
+
robo_appian/utils/components/DropdownUtils.pyc,sha256=nWNngNDP52jPNw27EkbN9GSAIf_4YeCcfNcprCr4t-A,4334
|
|
7
|
+
robo_appian/utils/components/InputUtils.pyc,sha256=tj7K8cbzwKxktSEW7-yRcwaPVlIdQGNToJIcdfigHmg,4530
|
|
8
|
+
robo_appian/utils/components/LabelUtils.pyc,sha256=EBWhbr1xHRttUjG2o3YGmDMpc36g0RcHCk3ZbyAjvks,1086
|
|
9
|
+
robo_appian/utils/components/LinkUtils.pyc,sha256=ojrwAHobkXBLFRTOUC5KnDhNPjSFymcfXd_Ug33ICJM,1133
|
|
10
|
+
robo_appian/utils/components/TabUtils.pyc,sha256=cWs1KGtMkb6pkfXDsVvp6oHXVMRiKwTEoqWMF99lohI,1494
|
|
11
|
+
robo_appian/utils/components/TableUtils.pyc,sha256=2nyaYzsOcYuspRf-Hg8-8ZB0yJ8qlN1dCLqkB2ulpmY,4532
|
|
12
|
+
robo_appian/utils/components/__init__.py,sha256=GqOJu-ZZRLzA9Nby6uXo82hxkSOPW_ZxBtMCn0xgoB8,19
|
|
13
|
+
robo_appian/utils/controllers/ComponentDriver.pyc,sha256=VdV-KUlG6REm6OSJ4uDlMEcE6opRbgDIJexI7jCD-ks,2983
|
|
14
|
+
robo_appian/utils/controllers/__init__.py,sha256=GqOJu-ZZRLzA9Nby6uXo82hxkSOPW_ZxBtMCn0xgoB8,19
|
|
15
|
+
robo_appian/utils/exceptions/MyCustomError.pyc,sha256=duaUZ7I3lL9L5-LOKBUkLyRuGAUIVjoX5oWsDzCodlM,672
|
|
16
|
+
robo_appian/utils/exceptions/__init__.py,sha256=GqOJu-ZZRLzA9Nby6uXo82hxkSOPW_ZxBtMCn0xgoB8,19
|
|
17
|
+
robo_appian-0.0.4.dist-info/licenses/LICENSE,sha256=g-xR4dRa9_4iFkMoJmED-wE-J5hoxbk3105Knhfpjm0,1068
|
|
18
|
+
robo_appian_source_backup/__init__.py,sha256=AiMpl0fcPrlwMyUH0ZRzVYAlv4WY6e225XQCMuJa0Zk,779
|
|
19
|
+
robo_appian_source_backup/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
robo_appian_source_backup/utils/components/ButtonUtils.py,sha256=Go_F2yJbGHho06notteHU3kXAdpA9EvXw1zm4zp260s,2204
|
|
21
|
+
robo_appian_source_backup/utils/components/ComponentUtils.py,sha256=-6CSRa2mBCPt9BrKXXO1cP6IsZ6Tle1X3rlfoJZlpjc,11779
|
|
22
|
+
robo_appian_source_backup/utils/components/DateUtils.py,sha256=r-4XnuGwA_cSHjWQub7-qoQQ29eBsG14uumXZkXpcDI,4615
|
|
23
|
+
robo_appian_source_backup/utils/components/DropdownUtils.py,sha256=rIqkkJYYJnWsOOppMa-tHeQx9WGQYeNpBSJxnulFUH8,6369
|
|
24
|
+
robo_appian_source_backup/utils/components/InputUtils.py,sha256=tuyzWDhxXdHqJ3XGS8O1TA22CaNSLEDpKFWf0QSlsQA,7278
|
|
25
|
+
robo_appian_source_backup/utils/components/LabelUtils.py,sha256=5ovTy9OY-QtLS8UoBXeqi4MQDvlPqVWDnp7SIcXWkJw,1230
|
|
26
|
+
robo_appian_source_backup/utils/components/LinkUtils.py,sha256=T7dJ5xSXp436VXhczWrQHC13L5wXTXxxgAvBdyKuYM4,1420
|
|
27
|
+
robo_appian_source_backup/utils/components/TabUtils.py,sha256=_KsImdeVITxmotphaqVARwhOhAvs4CLWHlx9wr-qZTk,2070
|
|
28
|
+
robo_appian_source_backup/utils/components/TableUtils.py,sha256=W-5fpjRStCmSLlryeHvBiOH83qCXNHgeVukMS3iAs6o,8276
|
|
29
|
+
robo_appian_source_backup/utils/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
robo_appian_source_backup/utils/controllers/ComponentDriver.py,sha256=Lzhlf7W85FjZn_0j9eybrgC8wSCzUEvsAbgbGNvTMLY,4128
|
|
31
|
+
robo_appian_source_backup/utils/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
robo_appian_source_backup/utils/exceptions/MyCustomError.py,sha256=DVAkytXNNQNjqyTyCjk6FFd6fr3AsBe57Y19erDSqVs,222
|
|
33
|
+
robo_appian_source_backup/utils/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
robo_appian-0.0.4.dist-info/METADATA,sha256=LpZLjkHL-r978F_hEzlh-oHQ2HaOUpV0-RGJVZ_ZdQw,4880
|
|
35
|
+
robo_appian-0.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
36
|
+
robo_appian-0.0.4.dist-info/top_level.txt,sha256=UuP4kHKT_rk8Cj08kDZHMv-SMu-c1gouluxYURCUgtk,38
|
|
37
|
+
robo_appian-0.0.4.dist-info/RECORD,,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from robo_appian.utils.components.ButtonUtils import ButtonUtils
|
|
2
|
+
from robo_appian.utils.components.ComponentUtils import ComponentUtils
|
|
3
|
+
from robo_appian.utils.components.DateUtils import DateUtils
|
|
4
|
+
from robo_appian.utils.components.DropdownUtils import DropdownUtils
|
|
5
|
+
from robo_appian.utils.components.InputUtils import InputUtils
|
|
6
|
+
from robo_appian.utils.components.LabelUtils import LabelUtils
|
|
7
|
+
from robo_appian.utils.components.LinkUtils import LinkUtils
|
|
8
|
+
from robo_appian.utils.components.TableUtils import TableUtils
|
|
9
|
+
from robo_appian.utils.components.TabUtils import TabUtils
|
|
10
|
+
|
|
11
|
+
__version__ = "0.0.2"
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"ButtonUtils",
|
|
15
|
+
"ComponentUtils",
|
|
16
|
+
"DateUtils",
|
|
17
|
+
"DropdownUtils",
|
|
18
|
+
"InputUtils",
|
|
19
|
+
"LabelUtils",
|
|
20
|
+
"LinkUtils",
|
|
21
|
+
"TableUtils",
|
|
22
|
+
"TabUtils"
|
|
23
|
+
]
|
|
File without changes
|
|
@@ -45,15 +45,15 @@ class DropdownUtils:
|
|
|
45
45
|
# It ensures that the dropdown is clickable and ready for interaction.
|
|
46
46
|
# The dropdown component is expected to have a structure where the label is within a span inside a div.
|
|
47
47
|
|
|
48
|
-
xpath = f'.//div[./div/span[normalize-space(text())="{dropdown_label}"]]/div/div/div/div[@role="combobox" and @tabindex="0"]'
|
|
48
|
+
# xpath = f'.//div[./div/span[normalize-space(text())="{dropdown_label}"]]/div/div/div/div[@role="combobox" and @tabindex="0"]'
|
|
49
|
+
# V0.0.4
|
|
50
|
+
xpath = f'.//div[./div/span[contains(normalize-space(text()), "{dropdown_label}")]]/div/div/div/div[@role="combobox" and @tabindex="0"][0]'
|
|
49
51
|
component = wait.until(EC.element_to_be_clickable((By.XPATH, xpath)))
|
|
50
52
|
return component
|
|
51
53
|
|
|
52
54
|
@staticmethod
|
|
53
55
|
def selectValueUsingComponent(
|
|
54
|
-
wait: WebDriverWait,
|
|
55
|
-
combobox: WebElement,
|
|
56
|
-
value: str
|
|
56
|
+
wait: WebDriverWait, combobox: WebElement, value: str
|
|
57
57
|
) -> None:
|
|
58
58
|
"""
|
|
59
59
|
Selects a value from a dropdown component using the provided combobox element.
|
|
@@ -74,7 +74,7 @@ class DropdownUtils:
|
|
|
74
74
|
raise ValueError(f"Dropdown component object is not valid.")
|
|
75
75
|
|
|
76
76
|
component: WebElement = combobox.find_element(By.XPATH, "./div/div") # type: ignore[reportUnknownMemberType]
|
|
77
|
-
aria_controls = component.get_attribute("aria-controls")
|
|
77
|
+
aria_controls = component.get_attribute("aria-controls") # type: ignore[reportUnknownMemberType]
|
|
78
78
|
component.click()
|
|
79
79
|
|
|
80
80
|
xpath = f'.//div/ul[@id="{aria_controls}"]/li[./div[normalize-space(text())="{value}"]]'
|
|
@@ -100,7 +100,7 @@ class DropdownUtils:
|
|
|
100
100
|
# and then clicks on the dropdown to display the options.
|
|
101
101
|
|
|
102
102
|
combobox = DropdownUtils.findDropdownEnabled(wait, label)
|
|
103
|
-
aria_controls = combobox.get_attribute("aria-controls")
|
|
103
|
+
aria_controls = combobox.get_attribute("aria-controls") # type: ignore[reportUnknownMemberType]
|
|
104
104
|
combobox.click()
|
|
105
105
|
|
|
106
106
|
xpath = f'.//div/ul[@id="{aria_controls}"]/li[./div[normalize-space(text())="{value}"]]'
|
|
@@ -126,8 +126,8 @@ class DropdownUtils:
|
|
|
126
126
|
# and the component ID, clicks on the dropdown to display the search input,
|
|
127
127
|
|
|
128
128
|
component = DropdownUtils.findDropdownEnabled(wait, dropdown_label)
|
|
129
|
-
component_id = component.get_attribute("aria-labelledby")
|
|
130
|
-
aria_controls = component.get_attribute("aria-controls")
|
|
129
|
+
component_id = component.get_attribute("aria-labelledby") # type: ignore[reportUnknownMemberType]
|
|
130
|
+
aria_controls = component.get_attribute("aria-controls") # type: ignore[reportUnknownMemberType]
|
|
131
131
|
component.click()
|
|
132
132
|
|
|
133
133
|
input_component_id = str(component_id) + "_searchInput"
|
|
@@ -37,7 +37,9 @@ class InputUtils:
|
|
|
37
37
|
# This method locates an input component that contains a label with the specified text.
|
|
38
38
|
# It then retrieves the component's ID and uses it to find the actual input element.
|
|
39
39
|
|
|
40
|
-
xpath = f".//div/label[text()='{label}']"
|
|
40
|
+
# xpath = f".//div/label[text()='{label}']"
|
|
41
|
+
# V0.0.4
|
|
42
|
+
xpath = f".//div/label[contains(normalize-space(text()), '{label}')]"
|
|
41
43
|
component: WebElement = wait.until(
|
|
42
44
|
EC.element_to_be_clickable((By.XPATH, xpath))
|
|
43
45
|
)
|
|
@@ -175,9 +177,11 @@ class InputUtils:
|
|
|
175
177
|
# and the component ID, clicks on the input to display the search input,
|
|
176
178
|
# and sets the specified value in the search input field.
|
|
177
179
|
|
|
178
|
-
xpath = (
|
|
179
|
-
|
|
180
|
-
)
|
|
180
|
+
# xpath = (
|
|
181
|
+
# f".//div[./div/span[text()='{label}']]/div/div/div/input[@role='combobox']"
|
|
182
|
+
# )
|
|
183
|
+
# V0.0.4
|
|
184
|
+
xpath = f".//div[./div/span[contains(normalize-space(text())='{label}']]/div/div/div/input[@role='combobox']"
|
|
181
185
|
search_input_component = wait.until(
|
|
182
186
|
EC.element_to_be_clickable((By.XPATH, xpath))
|
|
183
187
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.3
|
|
2
|
-
Name: robo_appian
|
|
3
|
-
Version: 0.0.3
|
|
4
|
-
Summary: Automate your Appian code testing with Python. Boost quality, save time.
|
|
5
|
-
Author: Dinil Mithra
|
|
6
|
-
Author-email: dinilmithra@mailme@gmail.com
|
|
7
|
-
Requires-Python: >=3.12,<4.0
|
|
8
|
-
Classifier: Operating System :: OS Independent
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
-
Requires-Dist: numpy
|
|
13
|
-
Requires-Dist: requests (>=2.25.1,<3.0.0)
|
|
14
|
-
Requires-Dist: selenium (>=4.34.0)
|
|
15
|
-
Project-URL: Homepage, https://github.com/dinilmithra/robo_appian
|
|
16
|
-
Project-URL: Repository, https://github.com/dinilmithra/robo_appian.git
|
|
17
|
-
Description-Content-Type: text/markdown
|
|
18
|
-
|
|
19
|
-
# Robo Appian
|
|
20
|
-
|
|
21
|
-
Python library for automating Appian web UI test cases!
|
|
22
|
-
|
|
23
|
-
# Modules
|
|
24
|
-
## Components
|
|
25
|
-
|
|
26
|
-
ButtonUtils: Find and click buttons.
|
|
27
|
-
DateUtils: Interact with date fields.
|
|
28
|
-
DropdownUtils: Interact with dropdowns.
|
|
29
|
-
InputUtils: Interact with input fields.
|
|
30
|
-
LabelUtils: Find labels.
|
|
31
|
-
LinkUtils: Click links.
|
|
32
|
-
TableUtils: Interact with tables.
|
|
33
|
-
TabUtils: Interact with tabs.
|
|
34
|
-
ComponentUtils: General utilities for components (input, dropdown, tab, etc).
|
|
35
|
-
|
|
36
|
-
## Controllers
|
|
37
|
-
|
|
38
|
-
ComponentDriver: High-level interface to execute actions on components.
|
|
39
|
-
|
|
40
|
-
## Exceptions
|
|
41
|
-
|
|
42
|
-
MyCustomError: Custom exception for specific error conditions.
|
|
43
|
-
|
|
44
|
-
# Usage
|
|
45
|
-
|
|
46
|
-
Import the utilities in your test scripts:
|
|
47
|
-
|
|
48
|
-
from robo_appian import (
|
|
49
|
-
ButtonUtils, ComponentUtils, DateUtils, DropdownUtils, InputUtils,
|
|
50
|
-
LabelUtils, LinkUtils, TableUtils, TabUtils
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
# Example: Set a Date Value
|
|
54
|
-
DateUtils.set_date_value("date_field_id", "2023-10-01")
|
|
55
|
-
|
|
56
|
-
# Example: Click a Button
|
|
57
|
-
ButtonUtils.click_button("submit_button_id")
|
|
58
|
-
|
|
59
|
-
# Example: Select a Dropdown Value
|
|
60
|
-
DropdownUtils.select_value("dropdown_id", "Option 1")
|
|
61
|
-
|
|
62
|
-
# Example: Enter Text in an Input Field
|
|
63
|
-
InputUtils.enter_text("input_field_id", "Sample Text")
|
|
64
|
-
|
|
65
|
-
# Example: Click a Link
|
|
66
|
-
LinkUtils.click_link("link_id")
|
|
67
|
-
|
|
68
|
-
# Example: Click a Tab
|
|
69
|
-
TabUtils.click_tab("tab_id")
|
|
70
|
-
|
|
71
|
-
# Example: Get a Table Cell Value
|
|
72
|
-
TableUtils.get_cell_value("table_id", 1, 2) # Row 1, Column 2
|
|
73
|
-
|
|
74
|
-
# Example: Get a Label Value
|
|
75
|
-
LabelUtils.get_label_value("label_id")
|
|
76
|
-
|
|
77
|
-
# Example: Get a Component Value
|
|
78
|
-
ComponentUtils.get_component_value("component_id")
|
|
79
|
-
|
|
80
|
-
# Example: Use the Component Driver
|
|
81
|
-
from robo_appian.utils.controllers.ComponentDriver import ComponentDriver
|
|
82
|
-
ComponentDriver.execute(wait, "Button", "Click", "Submit", None)
|
|
83
|
-
|
|
84
|
-
## Dependencies
|
|
85
|
-
|
|
86
|
-
Python >= 3.8
|
|
87
|
-
Uses selenium
|
|
88
|
-
|
|
89
|
-
## License
|
|
90
|
-
|
|
91
|
-
MIT License. See LICENSE.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
robo_appian/__init__.py,sha256=AiMpl0fcPrlwMyUH0ZRzVYAlv4WY6e225XQCMuJa0Zk,779
|
|
2
|
-
robo_appian/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
robo_appian/utils/components/ButtonUtils.py,sha256=Go_F2yJbGHho06notteHU3kXAdpA9EvXw1zm4zp260s,2204
|
|
4
|
-
robo_appian/utils/components/ComponentUtils.py,sha256=-6CSRa2mBCPt9BrKXXO1cP6IsZ6Tle1X3rlfoJZlpjc,11779
|
|
5
|
-
robo_appian/utils/components/DateUtils.py,sha256=r-4XnuGwA_cSHjWQub7-qoQQ29eBsG14uumXZkXpcDI,4615
|
|
6
|
-
robo_appian/utils/components/DropdownUtils.py,sha256=GbH5iHvjunENhm5K4WUXEQhmsEtSBn54Z04Ow1QDEwE,6216
|
|
7
|
-
robo_appian/utils/components/InputUtils.py,sha256=AlVbSNMXgbGa1eoTWSGJlOoaQxZxgsSKkhsA__FHRVA,7032
|
|
8
|
-
robo_appian/utils/components/LabelUtils.py,sha256=5ovTy9OY-QtLS8UoBXeqi4MQDvlPqVWDnp7SIcXWkJw,1230
|
|
9
|
-
robo_appian/utils/components/LinkUtils.py,sha256=T7dJ5xSXp436VXhczWrQHC13L5wXTXxxgAvBdyKuYM4,1420
|
|
10
|
-
robo_appian/utils/components/TabUtils.py,sha256=_KsImdeVITxmotphaqVARwhOhAvs4CLWHlx9wr-qZTk,2070
|
|
11
|
-
robo_appian/utils/components/TableUtils.py,sha256=W-5fpjRStCmSLlryeHvBiOH83qCXNHgeVukMS3iAs6o,8276
|
|
12
|
-
robo_appian/utils/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
robo_appian/utils/controllers/ComponentDriver.py,sha256=Lzhlf7W85FjZn_0j9eybrgC8wSCzUEvsAbgbGNvTMLY,4128
|
|
14
|
-
robo_appian/utils/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
robo_appian/utils/exceptions/MyCustomError.py,sha256=DVAkytXNNQNjqyTyCjk6FFd6fr3AsBe57Y19erDSqVs,222
|
|
16
|
-
robo_appian/utils/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
robo_appian-0.0.3.dist-info/LICENSE,sha256=g-xR4dRa9_4iFkMoJmED-wE-J5hoxbk3105Knhfpjm0,1068
|
|
18
|
-
robo_appian-0.0.3.dist-info/METADATA,sha256=Vawue3RBemMAIGR0Eczb5_3BVm-vD-rj26yNox28FWQ,2586
|
|
19
|
-
robo_appian-0.0.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
20
|
-
robo_appian-0.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|