@@ -13,13 +13,22 @@ def __init__(self, page: Page):
13
13
def get_page (self ) -> Page :
14
14
return self .page
15
15
16
+ def get_selected_frame_or_page (self ):
17
+ if self .selected_iframe is not None :
18
+ return self .selected_iframe
19
+ else :
20
+ return self .page
21
+
16
22
async def goto (self , url : str ):
23
+ self .unselect_iframe ()
17
24
return await self .page .goto (url )
18
25
19
26
async def go_back (self ):
27
+ self .unselect_iframe ()
20
28
return await self .page .goBack ()
21
29
22
30
async def reload_page (self ):
31
+ self .unselect_iframe ()
23
32
return await self .page .reload ()
24
33
25
34
async def title (self ):
@@ -37,17 +46,17 @@ async def set_viewport_size(self, width: int, height: int):
37
46
async def click_with_selenium_locator (self , selenium_locator : str , options : dict = None , ** kwargs : Any ):
38
47
selector_value = SelectorAbstraction .get_selector (selenium_locator )
39
48
if SelectorAbstraction .is_xpath (selenium_locator ):
40
- await self .click_xpath (selector_value , options , ** kwargs )
49
+ await self ._click_xpath (selector_value , options , ** kwargs )
41
50
else :
42
- await self .click (selector_value , options , ** kwargs )
51
+ await self ._click (selector_value , options , ** kwargs )
43
52
44
- async def click (self , selector : str , options : dict = None , ** kwargs : Any ):
53
+ async def _click (self , selector : str , options : dict = None , ** kwargs : Any ):
45
54
if self .selected_iframe is not None :
46
55
return await self .selected_iframe .click (selector = selector , options = options , kwargs = kwargs )
47
56
else :
48
57
return await self .page .click (selector = selector , options = options , kwargs = kwargs )
49
58
50
- async def click_xpath (self , selector : str , options : dict = None , ** kwargs : Any ):
59
+ async def _click_xpath (self , selector : str , options : dict = None , ** kwargs : Any ):
51
60
if self .selected_iframe is not None :
52
61
elements = await self .selected_iframe .xpath (selector )
53
62
return await elements [0 ].click (options , ** kwargs )
@@ -61,17 +70,17 @@ async def click_xpath(self, selector: str, options: dict = None, **kwargs: Any):
61
70
async def type_with_selenium_locator (self , selenium_locator : str , text : str , options : dict = None , ** kwargs : Any ):
62
71
selector_value = SelectorAbstraction .get_selector (selenium_locator )
63
72
if SelectorAbstraction .is_xpath (selenium_locator ):
64
- await self .type_xpath (selector = selector_value , text = text , options = options , kwargs = kwargs )
73
+ await self ._type_xpath (selector = selector_value , text = text , options = options , kwargs = kwargs )
65
74
else :
66
- await self .type (selector = selector_value , text = text , options = options , kwargs = kwargs )
75
+ await self ._type (selector = selector_value , text = text , options = options , kwargs = kwargs )
67
76
68
- async def type (self , selector , text : str , options : dict = None , ** kwargs : Any ):
77
+ async def _type (self , selector , text : str , options : dict = None , ** kwargs : Any ):
69
78
if self .selected_iframe is not None :
70
79
return await self .selected_iframe .type (selector = selector , text = text , options = options , kwargs = kwargs )
71
80
else :
72
81
return await self .page .type (selector = selector , text = text , options = options , kwargs = kwargs )
73
82
74
- async def type_xpath (self , selector , text : str , options : dict = None , ** kwargs : Any ):
83
+ async def _type_xpath (self , selector , text : str , options : dict = None , ** kwargs : Any ):
75
84
if self .selected_iframe is not None :
76
85
elements = await self .selected_iframe .xpath (selector )
77
86
await elements [0 ].type (text , options , ** kwargs )
@@ -109,25 +118,62 @@ async def _waitForXPath(self, xpath: str, options: dict = None):
109
118
############
110
119
# Query
111
120
############
112
- async def querySelector (self , selector : str ):
113
- if self .selected_iframe is not None :
114
- return await self .selected_iframe .querySelector (selector = selector )
115
- else :
116
- return await self .page .querySelector (selector = selector )
117
-
118
121
async def querySelectorAll_with_selenium_locator (self , selenium_locator : str ):
119
122
selector_value = SelectorAbstraction .get_selector (selenium_locator )
120
123
if SelectorAbstraction .is_xpath (selenium_locator ):
121
- return await self .page . xpath (selector_value )
124
+ return await self ._querySelectorAllForXpath (selector_value )
122
125
else :
123
- return await self .page . querySelectorAll (selector_value )
126
+ return await self ._querySelectorAll (selector_value )
124
127
125
128
async def querySelector_with_selenium_locator (self , selenium_locator : str ):
126
129
selector_value = SelectorAbstraction .get_selector (selenium_locator )
127
130
if SelectorAbstraction .is_xpath (selenium_locator ):
128
- return (await self .page .xpath (selector_value ))[0 ]
131
+ return await self ._querySelectorForXpath (selector_value )
132
+ else :
133
+ return await self ._querySelector (selector_value )
134
+
135
+ async def _querySelector (self , selector : str ):
136
+ if self .selected_iframe is not None :
137
+ return await self .selected_iframe .querySelector (selector = selector )
138
+ else :
139
+ return await self .page .querySelector (selector = selector )
140
+
141
+ async def _querySelectorForXpath (self , selector : str ):
142
+ if self .selected_iframe is not None :
143
+ return (await self .selected_iframe .xpath (selector ))[0 ]
129
144
else :
130
- return await self .page .querySelector (selector_value )
145
+ return (await self .page .xpath (selector ))[0 ]
146
+
147
+ async def _querySelectorAll (self , selector : str ):
148
+ if self .selected_iframe is not None :
149
+ return await self .selected_iframe .querySelectorAll (selector = selector )
150
+ else :
151
+ return await self .page .querySelectorAll (selector = selector )
152
+
153
+ async def _querySelectorAllForXpath (self , selector : str ):
154
+ if self .selected_iframe is not None :
155
+ return (await self .selected_iframe .xpath (selector ))
156
+ else :
157
+ return (await self .page .xpath (selector ))
158
+
159
+ ############
160
+ # Select
161
+ ############
162
+ async def select_with_selenium_locator (self , selenium_locator : str , values : str ):
163
+ selector_value = SelectorAbstraction .get_selector (selenium_locator )
164
+ if SelectorAbstraction .is_xpath (selenium_locator ):
165
+ await self .get_selected_frame_or_page ().evaluate ('''
166
+ element = document.evaluate('{selector_value}//option[contains(@value, "{values}")]', document, null, XPathResult.ANY_TYPE, null).iterateNext();
167
+ element.selected = true;
168
+ ''' .format (selector_value = selector_value , values = values ))
169
+ else :
170
+ return await self .get_selected_frame_or_page ().select (selector_value , values )
171
+
172
+ ############
173
+ # Evaluate
174
+ ############
175
+ async def evaluate_with_selenium_locator (self , evaluate : str ):
176
+ return await self .get_selected_frame_or_page ().evaluate (evaluate )
131
177
132
178
##############################
133
179
# iframe
0 commit comments