@@ -154,14 +154,14 @@ async def test_owner_frame_for_iframe_elements(page, server, utils):
154154 await page .goto (server .EMPTY_PAGE )
155155 await utils .attach_frame (page , 'frame1' , server .EMPTY_PAGE )
156156 frame = page .mainFrame
157- element_handle = await frame .evaluateHandle ('() => document.querySelector("#frame1")' )
157+ element_handle = await frame .evaluateHandle ('document.querySelector("#frame1")' )
158158 assert await element_handle .ownerFrame () == frame
159159
160160async def test_owner_frame_for_cross_frame_evaluations (page , server , utils ):
161161 await page .goto (server .EMPTY_PAGE )
162162 await utils .attach_frame (page , 'frame1' , server .EMPTY_PAGE )
163163 frame = page .mainFrame
164- element_handle = await frame .evaluateHandle ('() => document.querySelector("#frame1").contentWindow.document.body' )
164+ element_handle = await frame .evaluateHandle ('document.querySelector("#frame1").contentWindow.document.body' )
165165 assert await element_handle .ownerFrame () == frame .childFrames [0 ]
166166
167167async def test_owner_frame_for_detached_elements (page , server ):
@@ -289,3 +289,94 @@ async def test_hover_when_node_is_removed(page, server):
289289 button = await page .querySelector ('#button-6' )
290290 await button .hover ()
291291 assert await page .evaluate ('document.querySelector("button:hover").id' ) == 'button-6'
292+
293+ async def test_should_fill_input (page , server ):
294+ await page .goto (server .PREFIX + '/input/textarea.html' )
295+ handle = await page .querySelector ('input' )
296+ await handle .fill ('some value' )
297+ assert await page .evaluate ('result' ) == 'some value'
298+
299+ async def test_should_fill_input_when_Node_is_removed (page , server ):
300+ await page .goto (server .PREFIX + '/input/textarea.html' )
301+ await page .evaluate ('delete window["Node"]' )
302+ handle = await page .querySelector ('input' )
303+ await handle .fill ('some value' )
304+ assert await page .evaluate ('result' ) == 'some value'
305+
306+ async def test_should_have_a_nice_preview (page , server ):
307+ await page .goto (f'{ server .PREFIX } /dom.html' )
308+ outer = await page .querySelector ('#outer' )
309+ inner = await page .querySelector ('#inner' )
310+ check = await page .querySelector ('#check' )
311+ text = await inner .evaluateHandle ('e => e.firstChild' )
312+ await page .evaluate ('1' ) # Give them a chance to calculate the preview.
313+ assert outer .toString () == 'JSHandle@<div id="outer" name="value">…</div>'
314+ assert inner .toString () == 'JSHandle@<div id="inner">Text,↵more text</div>'
315+ assert text .toString () == 'JSHandle@#text=Text,↵more text'
316+ assert check .toString () == 'JSHandle@<input checked id="check" foo="bar"" type="checkbox"/>'
317+
318+ async def test_get_attribute (page , server ):
319+ await page .goto (f'{ server .PREFIX } /dom.html' )
320+ handle = await page .querySelector ('#outer' )
321+ assert await handle .getAttribute ('name' ) == 'value'
322+ assert await page .getAttribute ('#outer' , 'name' ) == 'value'
323+
324+ async def test_inner_html (page , server ):
325+ await page .goto (f'{ server .PREFIX } /dom.html' )
326+ handle = await page .querySelector ('#outer' )
327+ assert await handle .innerHTML () == '<div id="inner">Text,\n more text</div>'
328+ assert await page .innerHTML ('#outer' ) == '<div id="inner">Text,\n more text</div>'
329+
330+ async def test_inner_text (page , server ):
331+ await page .goto (f'{ server .PREFIX } /dom.html' )
332+ handle = await page .querySelector ('#inner' )
333+ assert await handle .innerText () == 'Text, more text'
334+ assert await page .innerText ('#inner' ) == 'Text, more text'
335+
336+ async def test_inner_text_should_throw (page , server ):
337+ await page .setContent ('<svg>text</svg>' )
338+ error1 = None
339+ try :
340+ await page .innerText ('svg' )
341+ except Error as e :
342+ error1 = e
343+ assert 'Not an HTMLElement' in error1 .message
344+ handle = await page .querySelector ('svg' )
345+ error2 = None
346+ try :
347+ await handle .innerText ()
348+ except Error as e :
349+ error2 = e
350+ assert 'Not an HTMLElement' in error2 .message
351+
352+ async def test_text_content (page , server ):
353+ await page .goto (f'{ server .PREFIX } /dom.html' )
354+ handle = await page .querySelector ('#inner' )
355+ assert await handle .textContent () == 'Text,\n more text'
356+ assert await page .textContent ('#inner' ) == 'Text,\n more text'
357+
358+ async def test_should_check_the_box (page ):
359+ await page .setContent ('<input id="checkbox" type="checkbox"></input>' )
360+ input = await page .querySelector ('input' )
361+ await input .check ()
362+ assert await page .evaluate ('checkbox.checked' )
363+
364+ async def test_should_uncheck_the_box (page ):
365+ await page .setContent ('<input id="checkbox" type="checkbox" checked></input>' )
366+ input = await page .querySelector ('input' )
367+ await input .uncheck ()
368+ assert await page .evaluate ('checkbox.checked' ) == False
369+
370+ async def test_should_select_single_option (page , server ):
371+ await page .goto (server .PREFIX + '/input/select.html' )
372+ select = await page .querySelector ('select' )
373+ await select .selectOption ('blue' )
374+ assert await page .evaluate ('result.onInput' ) == ['blue' ]
375+ assert await page .evaluate ('result.onChange' ) == ['blue' ]
376+
377+ async def test_should_focus_a_button (page , server ):
378+ await page .goto (server .PREFIX + '/input/button.html' )
379+ button = await page .querySelector ('button' )
380+ assert await button .evaluate ('button => document.activeElement === button' ) == False
381+ await button .focus ()
382+ assert await button .evaluate ('button => document.activeElement === button' )
0 commit comments