|
| 1 | +import warnings |
| 2 | + |
| 3 | + |
| 4 | +def patch_selenium(): |
| 5 | + if version_selenium_is_larger_than_four(): |
| 6 | + from selenium import webdriver |
| 7 | + |
| 8 | + web_element = webdriver.remote.webelement.WebElement |
| 9 | + |
| 10 | + remote_driver = webdriver.remote.webdriver.WebDriver |
| 11 | + |
| 12 | + bys = ['id', 'class name', 'xpath', 'link text', 'partial link text', 'name', 'css selector', 'tag name'] |
| 13 | + for by in bys: |
| 14 | + name = '_'.join(by.split(' ')) |
| 15 | + find_element_by_function_name = f"find_element_by_{name}" |
| 16 | + find_elements_by_function_name = f"find_elements_by_{name}" |
| 17 | + setattr(web_element, find_element_by_function_name, find_element_by(by)) |
| 18 | + setattr(web_element, find_elements_by_function_name, find_elements_by(by)) |
| 19 | + setattr(remote_driver, find_element_by_function_name, find_element_by(by)) |
| 20 | + setattr(remote_driver, find_elements_by_function_name, find_elements_by(by)) |
| 21 | + |
| 22 | + |
| 23 | +def find_element_by(by): |
| 24 | + def func(self, value): |
| 25 | + warnings.warn("This function is deprecated in version 4, please review the usage for find_element.", |
| 26 | + category=DeprecationWarning, stacklevel=2) |
| 27 | + return self.find_element(by=by, value=value) |
| 28 | + return func |
| 29 | + |
| 30 | + |
| 31 | +def find_elements_by(by): |
| 32 | + def func(self, value): |
| 33 | + warnings.warn("This function is deprecated in version 4, please review the usage for find_elements.", |
| 34 | + category=DeprecationWarning, stacklevel=2) |
| 35 | + return self.find_elements(by=by, value=value) |
| 36 | + return func |
| 37 | + |
| 38 | + |
| 39 | +def version_selenium_is_larger_than_four(): |
| 40 | + import selenium |
| 41 | + from packaging import version |
| 42 | + se_version = version.parse(selenium.__version__) |
| 43 | + |
| 44 | + needs_patch = se_version >= version.parse("4.0") |
| 45 | + return needs_patch |
0 commit comments