Skip to content

Commit 82604be

Browse files
emanloveaaltat
authored andcommitted
Moved to using public method for wrapped element
1 parent 68595d2 commit 82604be

File tree

2 files changed

+41
-47
lines changed

2 files changed

+41
-47
lines changed

src/SeleniumLibrary/keywords/element.py

Lines changed: 33 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from typing import List, Optional, Tuple, Union
1818

1919
from SeleniumLibrary.utils import is_noney
20-
from SeleniumLibrary.utils.events.event import _unwrap_eventfiring_elements
20+
from SeleniumLibrary.utils.events.event import _unwrap_eventfiring_element
2121
from robot.utils import plural_or_not, is_truthy
2222
from selenium.webdriver.common.action_chains import ActionChains
2323
from selenium.webdriver.common.keys import Keys
@@ -642,7 +642,8 @@ def _click_with_action_chain(self, locator):
642642
self.info(f"Clicking '{locator}' using an action chain.")
643643
action = ActionChains(self.driver)
644644
element = self.find_element(locator)
645-
element = _unwrap_eventfiring_elements(self.driver, element)
645+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
646+
element = _unwrap_eventfiring_element(element)
646647
action.move_to_element(element)
647648
action.click()
648649
action.perform()
@@ -658,7 +659,8 @@ def _click_with_modifier(self, locator, tag, modifier):
658659
element = self.find_element(locator, tag=tag[0], required=False)
659660
if not element:
660661
element = self.find_element(locator, tag=tag[1])
661-
element = _unwrap_eventfiring_elements(self.driver, element)
662+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
663+
element = _unwrap_eventfiring_element(element)
662664
action.click(element)
663665
for item in modifier:
664666
action.key_up(item)
@@ -678,15 +680,10 @@ def click_element_at_coordinates(self, locator, xoffset, yoffset):
678680
f"Clicking element '{locator}' at coordinates x={xoffset}, y={yoffset}."
679681
)
680682
element = self.find_element(locator)
681-
element = _unwrap_eventfiring_elements(self.driver,element)
683+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
684+
element = _unwrap_eventfiring_element(element)
682685
action = ActionChains(self.driver)
683-
# Try/except can be removed when minimum required Selenium is 4.0 or greater.
684-
#try:
685686
action.move_to_element(element)
686-
#except AttributeError:
687-
# self.debug("Workaround for Selenium 3 bug.")
688-
# element = element.wrapped_element
689-
# action.move_to_element(element)
690687
action.move_by_offset(xoffset, yoffset)
691688
action.click()
692689
action.perform()
@@ -700,7 +697,8 @@ def double_click_element(self, locator: str):
700697
"""
701698
self.info(f"Double clicking element '{locator}'.")
702699
element = self.find_element(locator)
703-
element = _unwrap_eventfiring_elements(self.driver, element)
700+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
701+
element = _unwrap_eventfiring_element(element)
704702
action = ActionChains(self.driver)
705703
action.double_click(element).perform()
706704

@@ -726,14 +724,9 @@ def scroll_element_into_view(self, locator: str):
726724
New in SeleniumLibrary 3.2.0
727725
"""
728726
element = self.find_element(locator)
729-
element = _unwrap_eventfiring_elements(self.driver, element)
730-
# Try/except can be removed when minimum required Selenium is 4.0 or greater.
731-
#try:
727+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
728+
element = _unwrap_eventfiring_element(element)
732729
ActionChains(self.driver).move_to_element(element).perform()
733-
#except AttributeError:
734-
# self.debug("Workaround for Selenium 3 bug.")
735-
# element = element.wrapped_element
736-
# ActionChains(self.driver).move_to_element(element).perform()
737730

738731
@keyword
739732
def drag_and_drop(self, locator: str, target: str):
@@ -747,8 +740,11 @@ def drag_and_drop(self, locator: str, target: str):
747740
| `Drag And Drop` | css:div#element | css:div.target |
748741
"""
749742
element = self.find_element(locator)
750-
element = _unwrap_eventfiring_elements(self.driver, element)
743+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
744+
element = _unwrap_eventfiring_element(element)
751745
target = self.find_element(target)
746+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
747+
target = _unwrap_eventfiring_element(target)
752748
action = ActionChains(self.driver)
753749
action.drag_and_drop(element, target).perform()
754750

@@ -766,7 +762,8 @@ def drag_and_drop_by_offset(self, locator: str, xoffset: int, yoffset: int):
766762
| `Drag And Drop By Offset` | myElem | 50 | -35 | # Move myElem 50px right and 35px down |
767763
"""
768764
element = self.find_element(locator)
769-
element = _unwrap_eventfiring_elements(self.driver, element)
765+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
766+
element = _unwrap_eventfiring_element(element)
770767
action = ActionChains(self.driver)
771768
action.drag_and_drop_by_offset(element, xoffset, yoffset)
772769
action.perform()
@@ -785,7 +782,8 @@ def mouse_down(self, locator: str):
785782
"""
786783
self.info(f"Simulating Mouse Down on element '{locator}'.")
787784
element = self.find_element(locator)
788-
element = _unwrap_eventfiring_elements(self.driver, element)
785+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
786+
element = _unwrap_eventfiring_element(element)
789787
action = ActionChains(self.driver)
790788
action.click_and_hold(element).perform()
791789

@@ -798,18 +796,13 @@ def mouse_out(self, locator: str):
798796
"""
799797
self.info(f"Simulating Mouse Out on element '{locator}'.")
800798
element = self.find_element(locator)
801-
element = _unwrap_eventfiring_elements(self.driver, element)
799+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
800+
element = _unwrap_eventfiring_element(element)
802801
size = element.size
803802
offsetx = (size["width"] / 2) + 1
804803
offsety = (size["height"] / 2) + 1
805804
action = ActionChains(self.driver)
806-
# Try/except can be removed when minimum required Selenium is 4.0 or greater.
807-
#try:
808805
action.move_to_element(element)
809-
#except AttributeError:
810-
# self.debug("Workaround for Selenium 3 bug.")
811-
# element = element.wrapped_element
812-
# action.move_to_element(element)
813806
action.move_by_offset(offsetx, offsety)
814807
action.perform()
815808

@@ -822,15 +815,10 @@ def mouse_over(self, locator: str):
822815
"""
823816
self.info(f"Simulating Mouse Over on element '{locator}'.")
824817
element = self.find_element(locator)
825-
element = _unwrap_eventfiring_elements(self.driver,element)
818+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
819+
element = _unwrap_eventfiring_element(element)
826820
action = ActionChains(self.driver)
827-
# Try/except can be removed when minimum required Selenium is 4.0 or greater.
828-
#try:
829821
action.move_to_element(element).perform()
830-
#except AttributeError:
831-
# self.debug("Workaround for Selenium 3 bug.")
832-
# element = element.wrapped_element
833-
# action.move_to_element(element).perform()
834822

835823
@keyword
836824
def mouse_up(self, locator: str):
@@ -841,14 +829,16 @@ def mouse_up(self, locator: str):
841829
"""
842830
self.info(f"Simulating Mouse Up on element '{locator}'.")
843831
element = self.find_element(locator)
844-
element = _unwrap_eventfiring_elements(self.driver, element)
832+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
833+
element = _unwrap_eventfiring_element(element)
845834
ActionChains(self.driver).release(element).perform()
846835

847836
@keyword
848837
def open_context_menu(self, locator: str):
849838
"""Opens the context menu on the element identified by ``locator``."""
850839
element = self.find_element(locator)
851-
element = _unwrap_eventfiring_elements(self.driver, element)
840+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
841+
element = _unwrap_eventfiring_element(element)
852842
action = ActionChains(self.driver)
853843
action.context_click(element).perform()
854844

@@ -937,7 +927,8 @@ def press_keys(self, locator: Optional[str] = None, *keys: str):
937927
if not is_noney(locator):
938928
self.info(f"Sending key(s) {keys} to {locator} element.")
939929
element = self.find_element(locator)
940-
element = _unwrap_eventfiring_elements(self.driver, element)
930+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
931+
element = _unwrap_eventfiring_element(element)
941932
ActionChains(self.driver).click(element).perform()
942933
else:
943934
self.info(f"Sending key(s) {keys} to page.")
@@ -991,7 +982,8 @@ def mouse_down_on_link(self, locator: str):
991982
using ``id``, ``name``, ``href`` and the link text.
992983
"""
993984
element = self.find_element(locator, tag="link")
994-
element = _unwrap_eventfiring_elements(self.driver, element)
985+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
986+
element = _unwrap_eventfiring_element(element)
995987
action = ActionChains(self.driver)
996988
action.click_and_hold(element).perform()
997989

@@ -1034,7 +1026,8 @@ def mouse_down_on_image(self, locator: str):
10341026
using ``id``, ``name``, ``src`` and ``alt``.
10351027
"""
10361028
element = self.find_element(locator, tag="image")
1037-
element = _unwrap_eventfiring_elements(self.driver, element)
1029+
# _unwrap_eventfiring_element can be removed when minimum required Selenium is 4.0 or greater.
1030+
element = _unwrap_eventfiring_element(element)
10381031
action = ActionChains(self.driver)
10391032
action.click_and_hold(element).perform()
10401033

src/SeleniumLibrary/utils/events/event.py

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

1717
import abc
18-
from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver
18+
from selenium.webdriver.support.event_firing_webdriver import EventFiringWebElement
19+
from robot.api import logger
1920

2021
class Event:
2122
@abc.abstractmethod
2223
def trigger(self, *args, **kwargs):
2324
pass
2425

25-
def _unwrap_eventfiring_elements(ef_driver,elements):
26+
def _unwrap_eventfiring_element(element):
2627
""" Workaround for Selenium 3 bug.
2728
2829
References:
@@ -32,11 +33,11 @@ def _unwrap_eventfiring_elements(ef_driver,elements):
3233
https://github.com/SeleniumHQ/selenium/issues/6604
3334
3435
"""
35-
if not isinstance(ef_driver,EventFiringWebDriver) or selenium_major_version() >= 4:
36-
return elements
37-
unwrapped_elements = ef_driver._unwrap_element_args(elements)
38-
return unwrapped_elements
39-
36+
logger.debug("Workaround for Selenium 3 bug.")
37+
if not isinstance(element,EventFiringWebElement) or selenium_major_version() >= 4:
38+
return element
39+
return element.wrapped_element
40+
4041
def selenium_major_version():
4142
import selenium
4243
selenium_version = selenium.__version__

0 commit comments

Comments
 (0)