@@ -13,10 +13,17 @@ class Dropdown(Region):
1313 def __init__ (self , page , require_shadow = True , ** kwargs ):
1414 super ().__init__ (page , ** kwargs )
1515 self .utils = PomUtils (self .page .driver )
16+ self .is_search_dropdown = (
17+ page .__class__ .__name__ == "AboutPrefs"
18+ and page .url_kwargs .get ("category" ) == "search"
19+ )
1620 if require_shadow :
1721 self .shadow_elements = self .utils .get_shadow_content (self .root )
1822 self .dropmarker = next (
19- el for el in self .shadow_elements if el .tag_name == "dropmarker"
23+ el
24+ for el in self .shadow_elements
25+ if el .tag_name == "dropmarker"
26+ or el .get_attribute ("class" ) == "select-wrapper with-icon"
2027 )
2128
2229 @property
@@ -38,11 +45,21 @@ def select_option(
3845 except AttributeError :
3946 self .root .click ()
4047
41- matching_menuitems = [
42- el
43- for el in self .root .find_elements (By .CSS_SELECTOR , option_tag )
44- if el .get_attribute (label_name ) == option_name
45- ]
48+ if self .is_search_dropdown :
49+ panel_element = next (
50+ el for el in self .shadow_elements if el .tag_name == "panel-list"
51+ )
52+ matching_menuitems = [
53+ el
54+ for el in panel_element .find_elements (By .TAG_NAME , "panel-item" )
55+ if option_name in el .text
56+ ]
57+ else :
58+ matching_menuitems = [
59+ el
60+ for el in self .root .find_elements (By .CSS_SELECTOR , option_tag )
61+ if el .get_attribute (label_name ) == option_name
62+ ]
4663 if len (matching_menuitems ) == 0 :
4764 return False
4865 elif len (matching_menuitems ) == 1 :
@@ -51,7 +68,13 @@ def select_option(
5168 else :
5269 matching_menuitems [0 ].click ()
5370 if wait_for_selection :
54- self .wait .until (EC .element_to_be_selected (matching_menuitems [0 ]))
71+ if self .is_search_dropdown :
72+ panel_trigger = self .dropmarker .find_element (
73+ By .CLASS_NAME , "panel-trigger"
74+ )
75+ self .wait .until (lambda _ : panel_trigger .text == option_name )
76+ else :
77+ self .wait .until (EC .element_to_be_selected (matching_menuitems [0 ]))
5578 # self.root.send_keys(Keys.ESCAPE)
5679 return self
5780 else :
0 commit comments