Skip to content

Commit 984db8c

Browse files
committed
Typing to base objects
1 parent 691df41 commit 984db8c

File tree

2 files changed

+36
-14
lines changed

2 files changed

+36
-14
lines changed

src/SeleniumLibrary/base/context.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
16+
from typing import Any, Optional, List
17+
18+
from selenium.webdriver.remote.webelement import WebElement
1619

1720
from SeleniumLibrary.utils import escape_xpath_value
1821

@@ -39,18 +42,24 @@ def element_finder(self):
3942
return self.ctx._element_finder
4043

4144
@element_finder.setter
42-
def element_finder(self, value):
45+
def element_finder(self, value: Any):
4346
self.ctx._element_finder = value
4447

4548
@property
4649
def event_firing_webdriver(self):
4750
return self.ctx.event_firing_webdriver
4851

4952
@event_firing_webdriver.setter
50-
def event_firing_webdriver(self, event_firing_webdriver):
53+
def event_firing_webdriver(self, event_firing_webdriver: Any):
5154
self.ctx.event_firing_webdriver = event_firing_webdriver
5255

53-
def find_element(self, locator, tag=None, required=True, parent=None):
56+
def find_element(
57+
self,
58+
locator: str,
59+
tag: Optional[str] = None,
60+
required: bool = True,
61+
parent: WebElement = None,
62+
) -> WebElement:
5463
"""Find element matching `locator`.
5564
5665
:param locator: Locator to use when searching the element.
@@ -72,7 +81,9 @@ def find_element(self, locator, tag=None, required=True, parent=None):
7281
"""
7382
return self.element_finder.find(locator, tag, True, required, parent)
7483

75-
def find_elements(self, locator, tag=None, parent=None):
84+
def find_elements(
85+
self, locator: str, tag: Optional[str] = None, parent: WebElement = None
86+
) -> List[WebElement]:
7687
"""Find all elements matching `locator`.
7788
7889
:param locator: Locator to use when searching the element.
@@ -88,14 +99,14 @@ def find_elements(self, locator, tag=None, parent=None):
8899
"""
89100
return self.element_finder.find(locator, tag, False, False, parent)
90101

91-
def is_text_present(self, text):
102+
def is_text_present(self, text: str):
92103
locator = f"xpath://*[contains(., {escape_xpath_value(text)})]"
93104
return self.find_element(locator, required=False) is not None
94105

95-
def is_element_enabled(self, locator, tag=None):
106+
def is_element_enabled(self, locator: str, tag: Optional[str] = None) -> bool:
96107
element = self.find_element(locator, tag)
97108
return element.is_enabled() and element.get_attribute("readonly") is None
98109

99-
def is_visible(self, locator):
110+
def is_visible(self, locator: str) -> bool:
100111
element = self.find_element(locator, required=False)
101112
return element.is_displayed() if element else None

src/SeleniumLibrary/base/librarycomponent.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# limitations under the License.
1616

1717
import os
18+
from typing import Optional
1819

1920
from robot.api import logger
2021
from robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError
@@ -25,23 +26,29 @@
2526

2627

2728
class LibraryComponent(ContextAware):
28-
def info(self, msg, html=False):
29+
def info(self, msg: str, html: bool = False):
2930
logger.info(msg, html)
3031

3132
def debug(self, msg, html=False):
3233
logger.debug(msg, html)
3334

34-
def log(self, msg, level="INFO", html=False):
35+
def log(self, msg: str, level: str = "INFO", html: bool = False):
3536
if not is_noney(level):
3637
logger.write(msg, level.upper(), html)
3738

38-
def warn(self, msg, html=False):
39+
def warn(self, msg: str, html: bool = False):
3940
logger.warn(msg, html)
4041

41-
def log_source(self, loglevel="INFO"):
42+
def log_source(self, loglevel: str = "INFO"):
4243
self.ctx.log_source(loglevel)
4344

44-
def assert_page_contains(self, locator, tag=None, message=None, loglevel="TRACE"):
45+
def assert_page_contains(
46+
self,
47+
locator: str,
48+
tag: Optional[str] = None,
49+
message: Optional[str] = None,
50+
loglevel: str = "TRACE",
51+
):
4552
tag_message = tag or "element"
4653
if not self.find_element(locator, tag, required=False):
4754
self.log_source(loglevel)
@@ -53,7 +60,11 @@ def assert_page_contains(self, locator, tag=None, message=None, loglevel="TRACE"
5360
logger.info(f"Current page contains {tag_message} '{locator}'.")
5461

5562
def assert_page_not_contains(
56-
self, locator, tag=None, message=None, loglevel="TRACE"
63+
self,
64+
locator: str,
65+
tag: Optional[str] = None,
66+
message: Optional[str] = None,
67+
loglevel: str = "TRACE",
5768
):
5869
tag_message = tag or "element"
5970
if self.find_element(locator, tag, required=False):
@@ -63,7 +74,7 @@ def assert_page_not_contains(
6374
raise AssertionError(message)
6475
logger.info(f"Current page does not contain {tag_message} '{locator}'.")
6576

66-
def get_timeout(self, timeout=None):
77+
def get_timeout(self, timeout: Optional[str] = None) -> float:
6778
if is_noney(timeout):
6879
return self.ctx.timeout
6980
return timestr_to_secs(timeout)

0 commit comments

Comments
 (0)