@@ -103,15 +103,17 @@ def click(self, selector, by=By.CSS_SELECTOR,
103
103
timeout = settings .SMALL_TIMEOUT , delay = 0 ):
104
104
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
105
105
timeout = self .__get_new_timeout (timeout )
106
- if page_utils .is_xpath_selector (selector ):
107
- by = By .XPATH
106
+ selector , by = self .__recalculate_selector (selector , by )
108
107
if page_utils .is_link_text_selector (selector ):
109
- selector = page_utils .get_link_text_from_selector (selector )
110
- by = By .LINK_TEXT
111
108
if not self .is_link_text_visible (selector ):
112
109
# Handle a special case of links hidden in dropdowns
113
110
self .click_link_text (selector , timeout = timeout )
114
111
return
112
+ if page_utils .is_partial_link_text_selector (selector ):
113
+ if not self .is_partial_link_text_visible (selector ):
114
+ # Handle a special case of partial links hidden in dropdowns
115
+ self .click_partial_link_text (selector , timeout = timeout )
116
+ return
115
117
element = page_actions .wait_for_element_visible (
116
118
self .driver , selector , by , timeout = timeout )
117
119
self .__demo_mode_highlight_if_active (selector , by )
@@ -427,11 +429,7 @@ def get_attribute(self, selector, attribute, by=By.CSS_SELECTOR,
427
429
""" This method uses JavaScript to get the value of an attribute. """
428
430
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
429
431
timeout = self .__get_new_timeout (timeout )
430
- if page_utils .is_xpath_selector (selector ):
431
- by = By .XPATH
432
- if page_utils .is_link_text_selector (selector ):
433
- selector = page_utils .get_link_text_from_selector (selector )
434
- by = By .LINK_TEXT
432
+ selector , by = self .__recalculate_selector (selector , by )
435
433
self .wait_for_ready_state_complete ()
436
434
time .sleep (0.01 )
437
435
element = page_actions .wait_for_element_present (
@@ -496,11 +494,7 @@ def get_property_value(self, selector, property, by=By.CSS_SELECTOR,
496
494
self.assertTrue(float(opacity) > 0, "Element not visible!") """
497
495
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
498
496
timeout = self .__get_new_timeout (timeout )
499
- if page_utils .is_xpath_selector (selector ):
500
- by = By .XPATH
501
- if page_utils .is_link_text_selector (selector ):
502
- selector = page_utils .get_link_text_from_selector (selector )
503
- by = By .LINK_TEXT
497
+ selector , by = self .__recalculate_selector (selector , by )
504
498
self .wait_for_ready_state_complete ()
505
499
page_actions .wait_for_element_present (
506
500
self .driver , selector , by , timeout )
@@ -704,19 +698,11 @@ def type(self, selector, text, by=By.CSS_SELECTOR,
704
698
self .update_text (selector , text , by = by , timeout = timeout , retry = retry )
705
699
706
700
def is_element_present (self , selector , by = By .CSS_SELECTOR ):
707
- if page_utils .is_xpath_selector (selector ):
708
- by = By .XPATH
709
- if page_utils .is_link_text_selector (selector ):
710
- selector = page_utils .get_link_text_from_selector (selector )
711
- by = By .LINK_TEXT
701
+ selector , by = self .__recalculate_selector (selector , by )
712
702
return page_actions .is_element_present (self .driver , selector , by )
713
703
714
704
def is_element_visible (self , selector , by = By .CSS_SELECTOR ):
715
- if page_utils .is_xpath_selector (selector ):
716
- by = By .XPATH
717
- if page_utils .is_link_text_selector (selector ):
718
- selector = page_utils .get_link_text_from_selector (selector )
719
- by = By .LINK_TEXT
705
+ selector , by = self .__recalculate_selector (selector , by )
720
706
return page_actions .is_element_visible (self .driver , selector , by )
721
707
722
708
def is_link_text_visible (self , link_text ):
@@ -734,22 +720,14 @@ def is_partial_link_text_visible(self, partial_link_text):
734
720
def is_text_visible (self , text , selector = "html" , by = By .CSS_SELECTOR ):
735
721
self .wait_for_ready_state_complete ()
736
722
time .sleep (0.01 )
737
- if page_utils .is_xpath_selector (selector ):
738
- by = By .XPATH
739
- if page_utils .is_link_text_selector (selector ):
740
- selector = page_utils .get_link_text_from_selector (selector )
741
- by = By .LINK_TEXT
723
+ selector , by = self .__recalculate_selector (selector , by )
742
724
return page_actions .is_text_visible (self .driver , text , selector , by )
743
725
744
726
def find_elements (self , selector , by = By .CSS_SELECTOR , limit = 0 ):
745
727
""" Returns a list of matching WebElements.
746
728
If "limit" is set and > 0, will only return that many elements. """
747
729
self .wait_for_ready_state_complete ()
748
- if page_utils .is_xpath_selector (selector ):
749
- by = By .XPATH
750
- if page_utils .is_link_text_selector (selector ):
751
- selector = page_utils .get_link_text_from_selector (selector )
752
- by = By .LINK_TEXT
730
+ selector , by = self .__recalculate_selector (selector , by )
753
731
elements = self .driver .find_elements (by = by , value = selector )
754
732
if limit and limit > 0 and len (elements ) > limit :
755
733
elements = elements [:limit ]
@@ -759,11 +737,7 @@ def find_visible_elements(self, selector, by=By.CSS_SELECTOR, limit=0):
759
737
""" Returns a list of matching WebElements that are visible.
760
738
If "limit" is set and > 0, will only return that many elements. """
761
739
self .wait_for_ready_state_complete ()
762
- if page_utils .is_xpath_selector (selector ):
763
- by = By .XPATH
764
- if page_utils .is_link_text_selector (selector ):
765
- selector = page_utils .get_link_text_from_selector (selector )
766
- by = By .LINK_TEXT
740
+ selector , by = self .__recalculate_selector (selector , by )
767
741
v_elems = page_actions .find_visible_elements (self .driver , selector , by )
768
742
if limit and limit > 0 and len (v_elems ) > limit :
769
743
v_elems = v_elems [:limit ]
@@ -1965,12 +1939,10 @@ def jquery_update_text(self, selector, new_value, by=By.CSS_SELECTOR,
1965
1939
self .__demo_mode_pause_if_active ()
1966
1940
1967
1941
def hover_on_element (self , selector , by = By .CSS_SELECTOR ):
1942
+ selector , by = self .__recalculate_selector (selector , by )
1968
1943
if page_utils .is_xpath_selector (selector ):
1969
1944
selector = self .convert_to_css_selector (selector , By .XPATH )
1970
1945
by = By .CSS_SELECTOR
1971
- if page_utils .is_link_text_selector (selector ):
1972
- selector = page_utils .get_link_text_from_selector (selector )
1973
- by = By .LINK_TEXT
1974
1946
self .wait_for_element_visible (
1975
1947
selector , by = by , timeout = settings .SMALL_TIMEOUT )
1976
1948
self .__demo_mode_highlight_if_active (selector , by )
@@ -1983,20 +1955,12 @@ def hover_and_click(self, hover_selector, click_selector,
1983
1955
timeout = settings .SMALL_TIMEOUT ):
1984
1956
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
1985
1957
timeout = self .__get_new_timeout (timeout )
1986
- if page_utils .is_xpath_selector (hover_selector ):
1987
- hover_selector = self .convert_to_css_selector (
1988
- hover_selector , By .XPATH )
1989
- hover_by = By .CSS_SELECTOR
1990
- if page_utils .is_xpath_selector (click_selector ):
1991
- click_by = By .XPATH
1992
- if page_utils .is_link_text_selector (hover_selector ):
1993
- hover_selector = page_utils .get_link_text_from_selector (
1994
- hover_selector )
1995
- hover_by = By .LINK_TEXT
1996
- if page_utils .is_link_text_selector (click_selector ):
1997
- click_selector = page_utils .get_link_text_from_selector (
1998
- click_selector )
1999
- click_by = By .LINK_TEXT
1958
+ hover_selector , hover_by = self .__recalculate_selector (
1959
+ hover_selector , hover_by )
1960
+ hover_selector = self .convert_to_css_selector (
1961
+ hover_selector , hover_by )
1962
+ click_selector , click_by = self .__recalculate_selector (
1963
+ click_selector , click_by )
2000
1964
self .wait_for_element_visible (
2001
1965
hover_selector , by = hover_by , timeout = timeout )
2002
1966
self .__demo_mode_highlight_if_active (hover_selector , hover_by )
@@ -2164,11 +2128,7 @@ def wait_for_element_present(self, selector, by=By.CSS_SELECTOR,
2164
2128
The element does not need be visible (it may be hidden). """
2165
2129
if self .timeout_multiplier and timeout == settings .LARGE_TIMEOUT :
2166
2130
timeout = self .__get_new_timeout (timeout )
2167
- if page_utils .is_xpath_selector (selector ):
2168
- by = By .XPATH
2169
- if page_utils .is_link_text_selector (selector ):
2170
- selector = page_utils .get_link_text_from_selector (selector )
2171
- by = By .LINK_TEXT
2131
+ selector , by = self .__recalculate_selector (selector , by )
2172
2132
return page_actions .wait_for_element_present (
2173
2133
self .driver , selector , by , timeout )
2174
2134
@@ -2200,11 +2160,7 @@ def wait_for_element_visible(self, selector, by=By.CSS_SELECTOR,
2200
2160
timeout = settings .LARGE_TIMEOUT ):
2201
2161
""" Waits for an element to appear in the HTML of a page.
2202
2162
The element must be visible (it cannot be hidden). """
2203
- if page_utils .is_xpath_selector (selector ):
2204
- by = By .XPATH
2205
- if page_utils .is_link_text_selector (selector ):
2206
- selector = page_utils .get_link_text_from_selector (selector )
2207
- by = By .LINK_TEXT
2163
+ selector , by = self .__recalculate_selector (selector , by )
2208
2164
return page_actions .wait_for_element_visible (
2209
2165
self .driver , selector , by , timeout )
2210
2166
@@ -2232,11 +2188,7 @@ def assert_element(self, selector, by=By.CSS_SELECTOR,
2232
2188
self .wait_for_element_visible (selector , by = by , timeout = timeout )
2233
2189
2234
2190
if self .demo_mode :
2235
- if page_utils .is_xpath_selector (selector ):
2236
- by = By .XPATH
2237
- if page_utils .is_link_text_selector (selector ):
2238
- selector = page_utils .get_link_text_from_selector (selector )
2239
- by = By .LINK_TEXT
2191
+ selector , by = self .__recalculate_selector (selector , by )
2240
2192
messenger_post = "ASSERT %s: %s" % (by , selector )
2241
2193
self .__highlight_with_assert_success (messenger_post , selector , by )
2242
2194
return True
@@ -2259,11 +2211,7 @@ def wait_for_text_visible(self, text, selector="html", by=By.CSS_SELECTOR,
2259
2211
timeout = settings .LARGE_TIMEOUT ):
2260
2212
if self .timeout_multiplier and timeout == settings .LARGE_TIMEOUT :
2261
2213
timeout = self .__get_new_timeout (timeout )
2262
- if page_utils .is_xpath_selector (selector ):
2263
- by = By .XPATH
2264
- if page_utils .is_link_text_selector (selector ):
2265
- selector = page_utils .get_link_text_from_selector (selector )
2266
- by = By .LINK_TEXT
2214
+ selector , by = self .__recalculate_selector (selector , by )
2267
2215
return page_actions .wait_for_text_visible (
2268
2216
self .driver , text , selector , by , timeout )
2269
2217
@@ -2272,11 +2220,7 @@ def wait_for_exact_text_visible(self, text, selector="html",
2272
2220
timeout = settings .LARGE_TIMEOUT ):
2273
2221
if self .timeout_multiplier and timeout == settings .LARGE_TIMEOUT :
2274
2222
timeout = self .__get_new_timeout (timeout )
2275
- if page_utils .is_xpath_selector (selector ):
2276
- by = By .XPATH
2277
- if page_utils .is_link_text_selector (selector ):
2278
- selector = page_utils .get_link_text_from_selector (selector )
2279
- by = By .LINK_TEXT
2223
+ selector , by = self .__recalculate_selector (selector , by )
2280
2224
return page_actions .wait_for_exact_text_visible (
2281
2225
self .driver , text , selector , by , timeout )
2282
2226
@@ -2313,11 +2257,7 @@ def assert_text(self, text, selector="html", by=By.CSS_SELECTOR,
2313
2257
self .wait_for_text_visible (text , selector , by = by , timeout = timeout )
2314
2258
2315
2259
if self .demo_mode :
2316
- if page_utils .is_xpath_selector (selector ):
2317
- by = By .XPATH
2318
- if page_utils .is_link_text_selector (selector ):
2319
- selector = page_utils .get_link_text_from_selector (selector )
2320
- by = By .LINK_TEXT
2260
+ selector , by = self .__recalculate_selector (selector , by )
2321
2261
messenger_post = ("ASSERT TEXT {%s} in %s: %s"
2322
2262
% (text , by , selector ))
2323
2263
self .__highlight_with_assert_success (messenger_post , selector , by )
@@ -2336,11 +2276,7 @@ def assert_exact_text(self, text, selector="html", by=By.CSS_SELECTOR,
2336
2276
text , selector , by = by , timeout = timeout )
2337
2277
2338
2278
if self .demo_mode :
2339
- if page_utils .is_xpath_selector (selector ):
2340
- by = By .XPATH
2341
- if page_utils .is_link_text_selector (selector ):
2342
- selector = page_utils .get_link_text_from_selector (selector )
2343
- by = By .LINK_TEXT
2279
+ selector , by = self .__recalculate_selector (selector , by )
2344
2280
messenger_post = ("ASSERT TEXT {%s} in %s: %s"
2345
2281
% (text , by , selector ))
2346
2282
self .__highlight_with_assert_success (messenger_post , selector , by )
@@ -2447,11 +2383,7 @@ def wait_for_element_not_visible(self, selector, by=By.CSS_SELECTOR,
2447
2383
to qualify as not visible. """
2448
2384
if self .timeout_multiplier and timeout == settings .LARGE_TIMEOUT :
2449
2385
timeout = self .__get_new_timeout (timeout )
2450
- if page_utils .is_xpath_selector (selector ):
2451
- by = By .XPATH
2452
- if page_utils .is_link_text_selector (selector ):
2453
- selector = page_utils .get_link_text_from_selector (selector )
2454
- by = By .LINK_TEXT
2386
+ selector , by = self .__recalculate_selector (selector , by )
2455
2387
return page_actions .wait_for_element_not_visible (
2456
2388
self .driver , selector , by , timeout )
2457
2389
@@ -3072,6 +3004,13 @@ def __recalculate_selector(self, selector, by):
3072
3004
if page_utils .is_link_text_selector (selector ):
3073
3005
selector = page_utils .get_link_text_from_selector (selector )
3074
3006
by = By .LINK_TEXT
3007
+ if page_utils .is_partial_link_text_selector (selector ):
3008
+ selector = page_utils .get_partial_link_text_from_selector (selector )
3009
+ by = By .PARTIAL_LINK_TEXT
3010
+ if page_utils .is_name_selector (selector ):
3011
+ name = page_utils .get_name_from_selector (selector )
3012
+ selector = '[name="%s"]' % name
3013
+ by = By .CSS_SELECTOR
3075
3014
return (selector , by )
3076
3015
3077
3016
def __make_css_match_first_element_only (self , selector ):
0 commit comments