@@ -5923,14 +5923,21 @@ def __get_shadow_element(self, selector, timeout=None):
5923
5923
chromedriver_version = chrome_dr_version.split(" ")[0]
5924
5924
major_c_dr_version = chromedriver_version.split(".")[0]
5925
5925
if int(major_c_dr_version) < 96:
5926
+ upgrade_to = "latest"
5927
+ major_browser_version = (
5928
+ self.__get_major_browser_version()
5929
+ )
5930
+ if int(major_browser_version) >= 96:
5931
+ upgrade_to = str(major_browser_version)
5926
5932
message = (
5927
- "You need to upgrade to a newer version of "
5928
- "chromedriver to interact with Shadow root "
5929
- "elements!\n(Current driver version is: %s)"
5933
+ "You need to upgrade to a newer\n"
5934
+ "version of chromedriver to interact\n"
5935
+ "with Shadow root elements!\n"
5936
+ "(Current driver version is: %s)"
5930
5937
"\n(Minimum driver version is: 96.*)"
5931
- "\nTo upgrade: "
5932
- '"seleniumbase install chromedriver latest "'
5933
- % chromedriver_version
5938
+ "\nTo upgrade, run this: "
5939
+ '\n "seleniumbase install chromedriver %s "'
5940
+ % ( chromedriver_version, upgrade_to)
5934
5941
)
5935
5942
raise Exception(message)
5936
5943
if timeout != 0.1: # Skip wait for special 0.1 (See above)
@@ -5947,9 +5954,15 @@ def __get_shadow_element(self, selector, timeout=None):
5947
5954
# Firefox users will likely hit:
5948
5955
# https://github.com/mozilla/geckodriver/issues/1711
5949
5956
# When Firefox adds support, switch to element.shadow_root
5950
- shadow_root = self.execute_script(
5951
- "return arguments[0].shadowRoot", element
5952
- )
5957
+ try:
5958
+ shadow_root = self.execute_script(
5959
+ "return arguments[0].shadowRoot", element
5960
+ )
5961
+ except Exception:
5962
+ time.sleep(2)
5963
+ shadow_root = self.execute_script(
5964
+ "return arguments[0].shadowRoot", element
5965
+ )
5953
5966
if timeout == 0.1 and not shadow_root:
5954
5967
raise Exception(
5955
5968
"Element {%s} has no shadow root!" % selector_chain
@@ -5971,19 +5984,23 @@ def __get_shadow_element(self, selector, timeout=None):
5971
5984
and self.is_chromium()
5972
5985
and int(self.__get_major_browser_version()) >= 96
5973
5986
):
5974
- found = False
5975
- for i in range(int(timeout) * 3):
5976
- try:
5977
- element = shadow_root.find_element(
5978
- By.CSS_SELECTOR, value=selector_part)
5979
- found = True
5980
- break
5981
- except Exception:
5982
- time.sleep(0.2)
5983
- continue
5984
- if not found:
5987
+ if timeout == 0.1:
5985
5988
element = shadow_root.find_element(
5986
5989
By.CSS_SELECTOR, value=selector_part)
5990
+ else:
5991
+ found = False
5992
+ for i in range(int(timeout) * 4):
5993
+ try:
5994
+ element = shadow_root.find_element(
5995
+ By.CSS_SELECTOR, value=selector_part)
5996
+ found = True
5997
+ break
5998
+ except Exception:
5999
+ time.sleep(0.2)
6000
+ continue
6001
+ if not found:
6002
+ element = shadow_root.find_element(
6003
+ By.CSS_SELECTOR, value=selector_part)
5987
6004
else:
5988
6005
element = page_actions.wait_for_element_present(
5989
6006
shadow_root,
0 commit comments