@@ -470,6 +470,14 @@ describe('ElementHandle convenience API', function() {
470470 expect ( await handle . innerText ( ) ) . toBe ( 'Text, more text' ) ;
471471 expect ( await page . innerText ( '#inner' ) ) . toBe ( 'Text, more text' ) ;
472472 } ) ;
473+ it ( 'innerText should throw' , async ( { page, server} ) => {
474+ await page . setContent ( `<svg>text</svg>` ) ;
475+ const error1 = await page . innerText ( 'svg' ) . catch ( e => e ) ;
476+ expect ( error1 . message ) . toContain ( 'Not an HTMLElement' ) ;
477+ const handle = await page . $ ( 'svg' ) ;
478+ const error2 = await handle . innerText ( ) . catch ( e => e ) ;
479+ expect ( error2 . message ) . toContain ( 'Not an HTMLElement' ) ;
480+ } ) ;
473481 it ( 'textContent should work' , async ( { page, server} ) => {
474482 await page . goto ( `${ server . PREFIX } /dom.html` ) ;
475483 const handle = await page . $ ( '#inner' ) ;
@@ -498,6 +506,72 @@ describe('ElementHandle convenience API', function() {
498506 expect ( tc ) . toBe ( 'Hello' ) ;
499507 expect ( await page . evaluate ( ( ) => document . querySelector ( 'div' ) . textContent ) ) . toBe ( 'modified' ) ;
500508 } ) ;
509+ it ( 'innerText should be atomic' , async ( { page} ) => {
510+ const createDummySelector = ( ) => ( {
511+ create ( root , target ) { } ,
512+ query ( root , selector ) {
513+ const result = root . querySelector ( selector ) ;
514+ if ( result )
515+ Promise . resolve ( ) . then ( ( ) => result . textContent = 'modified' ) ;
516+ return result ;
517+ } ,
518+ queryAll ( root , selector ) {
519+ const result = Array . from ( root . querySelectorAll ( selector ) ) ;
520+ for ( const e of result )
521+ Promise . resolve ( ) . then ( ( ) => result . textContent = 'modified' ) ;
522+ return result ;
523+ }
524+ } ) ;
525+ await utils . registerEngine ( 'innerText' , createDummySelector ) ;
526+ await page . setContent ( `<div>Hello</div>` ) ;
527+ const tc = await page . innerText ( 'innerText=div' ) ;
528+ expect ( tc ) . toBe ( 'Hello' ) ;
529+ expect ( await page . evaluate ( ( ) => document . querySelector ( 'div' ) . innerText ) ) . toBe ( 'modified' ) ;
530+ } ) ;
531+ it ( 'innerHTML should be atomic' , async ( { page} ) => {
532+ const createDummySelector = ( ) => ( {
533+ create ( root , target ) { } ,
534+ query ( root , selector ) {
535+ const result = root . querySelector ( selector ) ;
536+ if ( result )
537+ Promise . resolve ( ) . then ( ( ) => result . textContent = 'modified' ) ;
538+ return result ;
539+ } ,
540+ queryAll ( root , selector ) {
541+ const result = Array . from ( root . querySelectorAll ( selector ) ) ;
542+ for ( const e of result )
543+ Promise . resolve ( ) . then ( ( ) => result . textContent = 'modified' ) ;
544+ return result ;
545+ }
546+ } ) ;
547+ await utils . registerEngine ( 'innerHTML' , createDummySelector ) ;
548+ await page . setContent ( `<div>Hello<span>world</span></div>` ) ;
549+ const tc = await page . innerHTML ( 'innerHTML=div' ) ;
550+ expect ( tc ) . toBe ( 'Hello<span>world</span>' ) ;
551+ expect ( await page . evaluate ( ( ) => document . querySelector ( 'div' ) . innerHTML ) ) . toBe ( 'modified' ) ;
552+ } ) ;
553+ it ( 'getAttribute should be atomic' , async ( { page} ) => {
554+ const createDummySelector = ( ) => ( {
555+ create ( root , target ) { } ,
556+ query ( root , selector ) {
557+ const result = root . querySelector ( selector ) ;
558+ if ( result )
559+ Promise . resolve ( ) . then ( ( ) => result . setAttribute ( 'foo' , 'modified' ) ) ;
560+ return result ;
561+ } ,
562+ queryAll ( root , selector ) {
563+ const result = Array . from ( root . querySelectorAll ( selector ) ) ;
564+ for ( const e of result )
565+ Promise . resolve ( ) . then ( ( ) => result . setAttribute ( 'foo' , 'modified' ) ) ;
566+ return result ;
567+ }
568+ } ) ;
569+ await utils . registerEngine ( 'getAttribute' , createDummySelector ) ;
570+ await page . setContent ( `<div foo=hello></div>` ) ;
571+ const tc = await page . getAttribute ( 'getAttribute=div' , 'foo' ) ;
572+ expect ( tc ) . toBe ( 'hello' ) ;
573+ expect ( await page . evaluate ( ( ) => document . querySelector ( 'div' ) . getAttribute ( 'foo' ) ) ) . toBe ( 'modified' ) ;
574+ } ) ;
501575} ) ;
502576
503577describe ( 'ElementHandle.check' , ( ) => {
0 commit comments