diff --git a/appium/webdriver/webdriver.py b/appium/webdriver/webdriver.py index 09d17094..14adc1cc 100644 --- a/appium/webdriver/webdriver.py +++ b/appium/webdriver/webdriver.py @@ -474,17 +474,6 @@ def _add_commands(self) -> None: get_atter(self) self.command_executor.add_command(Command.GET_STATUS, 'GET', '/status') - - # TODO Move commands for element to webelement - self.command_executor.add_command(Command.CLEAR, 'POST', '/session/$sessionId/element/$id/clear') - self.command_executor.add_command( - Command.LOCATION_IN_VIEW, - 'GET', - '/session/$sessionId/element/$id/location_in_view', - ) - - # MJSONWP for Selenium v4 - self.command_executor.add_command(Command.IS_ELEMENT_DISPLAYED, 'GET', '/session/$sessionId/element/$id/displayed') self.command_executor.add_command(Command.GET_CAPABILITIES, 'GET', '/session/$sessionId') self.command_executor.add_command(Command.GET_SCREEN_ORIENTATION, 'GET', '/session/$sessionId/orientation') diff --git a/appium/webdriver/webelement.py b/appium/webdriver/webelement.py index 8494af13..853639c5 100644 --- a/appium/webdriver/webelement.py +++ b/appium/webdriver/webelement.py @@ -17,6 +17,7 @@ from selenium.webdriver.common.utils import keys_to_typing from selenium.webdriver.remote.command import Command as RemoteCommand +from selenium.webdriver.remote.webdriver import WebDriver as Remote from selenium.webdriver.remote.webelement import WebElement as SeleniumWebElement from typing_extensions import Self @@ -35,6 +36,23 @@ def find_element(self, by: str, value: str | dict | None = None) -> Self: # typ def find_elements(self, by: str, value: str | dict | None = None) -> list[Self]: # type: ignore[override] ... + def __init__(self, parent: Remote, id_: int | str) -> None: + super().__init__(parent, id_) # type: ignore[arg-type] + self._add_commands() + + def _add_commands(self) -> None: + self._parent.command_executor.add_command(Command.CLEAR, 'POST', '/session/$sessionId/element/$id/clear') + self._parent.command_executor.add_command( + Command.LOCATION_IN_VIEW, + 'GET', + '/session/$sessionId/element/$id/location_in_view', + ) + self._parent.command_executor.add_command( + Command.IS_ELEMENT_DISPLAYED, + 'GET', + '/session/$sessionId/element/$id/displayed', + ) + def get_attribute(self, name: str) -> str | dict | None: # type: ignore[override] """Gets the given attribute or property of the element. diff --git a/test/unit/webdriver/webelement_test.py b/test/unit/webdriver/webelement_test.py index a37c2ec6..bbd23de9 100644 --- a/test/unit/webdriver/webelement_test.py +++ b/test/unit/webdriver/webelement_test.py @@ -101,3 +101,15 @@ def test_element_location_in_view(self): httpretty.last_request() assert loc == location_in_view + + @httpretty.activate + def test_is_displayed(self): + driver = android_w3c_driver() + httpretty.register_uri( + httpretty.GET, + appium_command('/session/1234567890/element/element_id/displayed'), + body=json.dumps({'value': True}), + ) + + element = MobileWebElement(driver, 'element_id') + assert element.is_displayed() is True