2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  ( c )  Microsoft  Corporation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Licensed  under  the  Apache  License ,  Version  2.0  ( the  "License" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  you  may  not  use  this  file  except  in  compliance  with  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  You  may  obtain  a  copy  of  the  License  at 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  http : //www.apache.org/licenses/LICENSE-2.0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Unless  required  by  applicable  law  or  agreed  to  in  writing ,  software 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  distributed  under  the  License  is  distributed  on  an  "AS IS"  BASIS , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  WITHOUT  WARRANTIES  OR  CONDITIONS  OF  ANY  KIND ,  either  express  or  implied . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  See  the  License  for  the  specific  language  governing  permissions  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  limitations  under  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-25 15:05:50 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  contextTest  as  it ,  expect  }  from  '../config/browserTest' ;  
						 
					
						
							
								
									
										
										
										
											2021-10-11 10:52:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  type  {  Page ,  Frame  }  from  'playwright-core' ;  
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								async  function  generate ( pageOrFrame : Page  |  Frame ,  target : string ) :  Promise < string >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  pageOrFrame . $eval ( target ,  e  = >  ( window  as  any ) . playwright . selector ( e ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it . describe ( 'selector generator' ,  ( )  = >  {  
						 
					
						
							
								
									
										
										
										
											2021-04-30 13:26:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it . skip ( ( {  mode  } )  = >  mode  !==  'default' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . beforeEach ( async  ( {  context  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  ( context  as  any ) . _enableRecorder ( {  language :  'javascript'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should prefer button over inner span' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button id=clickme><span></span></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '#clickme' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should prefer role=button over inner span' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div role=button><span></span></div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-19 22:38:47 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:role=button' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate text and normalize whitespace' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>Text  some \ n \ n \ n more  \ t text   </div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:text="Text some more text"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should not escape spaces inside named attr selectors' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-17 01:01:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <input placeholder="Foo b ar"/> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-11 16:50:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:attr=[placeholder=\"Foo b ar\"i]' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-17 01:01:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should generate text for <input type=button>' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <input type=button value="Click me"> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-11 15:58:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:role=button[name=\"Click me\"i]' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should trim text' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:text="Text0123456789Text0123456789Text0123456789Text0123456789Text0123456789Text012345"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should not escape text with >>' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>text>>text</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:text="text>>text"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should escape text with quote' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>text"text</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:text="text\\\"text"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should escape text with slash' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>/text</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( 'internal:text="\/text"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should not use text for select' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < select > < option > foo < / option > < / select > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < select  mark = 1 > < option > bar < / option > < / select > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[mark="1"]' ) ) . toBe ( 'internal:role=combobox >> nth=1' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use ordinal for identical nodes' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>Text</div><div>Text</div><div mark=1>Text</div><div>Text</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div[mark="1"]' ) ) . toBe ( ` internal:text="Text"i >> nth=2 ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should prefer data-testid' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>Text</div><div>Text</div><div data-testid=a>Text</div><div>Text</div> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-08 12:04:43 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[data-testid="a"]' ) ) . toBe ( 'internal:testid=[data-testid=\"a\"s]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use data-testid in strict errors' ,  async  ( {  page ,  playwright  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    playwright . selectors . setTestIdAttribute ( 'data-custom-id' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < div > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < div > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div  class = 'foo bar:0'  data-custom-id = 'One' > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div  class = 'foo bar:1'  data-custom-id = 'Two' > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  error  =  await  page . locator ( '.foo' ) . hover ( ) . catch ( e  = >  e ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( error . message ) . toContain ( 'strict mode violation' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( error . message ) . toContain ( '<div class=\"foo bar:0' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( error . message ) . toContain ( '<div class=\"foo bar:1' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( error . message ) . toContain ( ` aka getByTestId('One') ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( error . message ) . toContain ( ` aka getByTestId('Two') ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should handle first non-unique data-testid' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  data-testid = a  mark = 1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  data-testid = a > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-08 12:04:43 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div[mark="1"]' ) ) . toBe ( 'internal:testid=[data-testid=\"a\"s] >> nth=0' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should handle second non-unique data-testid' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  data-testid = a > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  data-testid = a  mark = 1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-08 12:04:43 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div[mark="1"]' ) ) . toBe ( ` internal:testid=[data-testid= \ "a \ "s] >> nth=1 ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use readable id' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  id = first - item  mark = 1 > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div[mark="1"]' ) ) . toBe ( '#first-item' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should not use generated id' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  id = aAbBcCdDeE  mark = 1 > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-04 07:34:23 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div[mark="1"]' ) ) . toBe ( ` div >> nth=1 ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:29:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should use internal:has-text' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > Hello  world < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < a > Hello  < span > world < / span > < / a > 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < a > Goodbye  < span > world < / span > < / a > 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:29:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'a:has-text("Hello")' ) ) . toBe ( ` a >> internal:has-text="Hello world"i ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-15 13:43:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should use internal:has-text with regexp' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < span > Hello  world < / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > < div > Hello  < span > world < / span > < / div > extra < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < a > Goodbye  < span > world < / span > < / a > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div div' ) ) . toBe ( ` div >> internal:has-text=/^Hello world $ / ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should chain text after parent' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > Hello  < span > world < / span > < / div > 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < b > Hello  < span  mark = 1 > world < / span > < / b > 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[mark="1"]' ) ) . toBe ( ` b >> internal:text="world"i ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use parent text' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > Hello  < span > world < / span > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > Goodbye  < span  mark = 1 > world < / span > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:29:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[mark="1"]' ) ) . toBe ( ` div >> internal:has-text="Goodbye world"i >> span ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should separate selectors by >>' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div > Text < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  id = "id" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div > Text < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '#id > div' ) ) . toBe ( '#id >> internal:text="Text"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should trim long text' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < div > Text  that  goes  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div  id = "id" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > Text  that  goes  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on  and  on < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '#id > div' ) ) . toBe ( ` #id >> internal:text="Text that goes on and on and on and on and on and on and on and on and on and on"i ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use nested ordinals' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < div > < c > < / c > < c > < / c > < c > < / c > < c > < / c > < c > < / c > < b > < / b > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        < b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < / c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < c  mark = 1 > < / c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / b > 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > < b > < / b > < / div > 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-25 11:11:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'c[mark="1"]' ) ) . toBe ( 'b:nth-child(2) > c' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should properly join child selectors under nested ordinals' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < div > < c > < / c > < c > < / c > < c > < / c > < c > < / c > < c > < / c > < b > < / b > < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-25 11:11:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        < b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            < c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            < / c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < b > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            < c  mark = 1 > < / c > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / b > 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > < b > < / b > < / div > 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-25 11:11:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'c[mark="1"]' ) ) . toBe ( 'b:nth-child(2) > div > c' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should not use input[value]' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < input  value = "one" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < input  value = "two"  mark = "1" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < input  value = "three" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input[mark="1"]' ) ) . toBe ( 'internal:role=textbox >> nth=1' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it . describe ( 'should prioritise attributes correctly' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( 'role' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      await  page . setContent ( ` <input name="foobar" type="text"/> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:role=textbox' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( 'placeholder' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      await  page . setContent ( ` <input placeholder="foobar" type="text"/> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-11 16:50:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:attr=[placeholder=\"foobar\"i]' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'name' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      await  page . setContent ( ` <input role="presentation" aria-hidden="false" name="foobar" type="date"/> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      expect ( await  generate ( page ,  'input' ) ) . toBe ( 'input[name="foobar"]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( 'type' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      await  page . setContent ( ` <input role="presentation" aria-hidden="false" type="checkbox"/> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      expect ( await  generate ( page ,  'input' ) ) . toBe ( 'input[type="checkbox"]' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should find text in shadow dom' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . $eval ( 'div' ,  div  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  shadowRoot  =  div . attachShadow ( {  mode :  'open'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  span  =  document . createElement ( 'span' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      span . textContent  =  'Target' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot . appendChild ( span ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'span' ) ) . toBe ( 'internal:text="Target"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should match in shadow dom' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . $eval ( 'div' ,  div  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  shadowRoot  =  div . attachShadow ( {  mode :  'open'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  input  =  document . createElement ( 'input' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot . appendChild ( input ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:role=textbox' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 21:53:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should match in deep shadow dom' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div></div><div></div><div><input></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . $eval ( 'div' ,  div1  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  shadowRoot1  =  div1 . attachShadow ( {  mode :  'open'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  input1  =  document . createElement ( 'input' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot1 . appendChild ( input1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  divExtra3  =  document . createElement ( 'div' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot1 . append ( divExtra3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  div2  =  document . createElement ( 'div' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot1 . append ( div2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  shadowRoot2  =  div2 . attachShadow ( {  mode :  'open'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  input2  =  document . createElement ( 'input' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      input2 . setAttribute ( 'value' ,  'foo' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      shadowRoot2 . appendChild ( input2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input[value=foo]' ) ) . toBe ( 'internal:role=textbox >> nth=2' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should work in dynamic iframes without navigation' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  [ frame ]  =  await  Promise . all ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      page . waitForEvent ( 'frameattached' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      page . evaluate ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-25 18:43:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  new  Promise < void > ( f  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								          const  iframe  =  document . createElement ( 'iframe' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          iframe . onload  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            iframe . contentDocument . body . innerHTML  =  '<div>Target</div>' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            f ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          document . body . appendChild ( iframe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( frame ,  'div' ) ) . toBe ( 'internal:text="Target"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-23 16:24:45 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should use the name attributes for elements that can have it' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( const  tagName  of  [ 'button' ,  'input' ,  'textarea' ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      await  page . setContent ( ` <form>< ${ tagName }  name="foo"></ ${ tagName } >< ${ tagName }  name="bar"></ ${ tagName } ></form> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      expect ( await  generate ( page ,  '[name=bar]' ) ) . toBe ( ` ${ tagName } [name="bar"] ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-02 21:14:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <iframe name="foo"></iframe><iframe name="bar"></iframe> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[name=bar]' ) ) . toBe ( ` iframe[name="bar"] ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <frameset><frame name="foo"></frame><frame name="bar"></frame></frameset> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[name=bar]' ) ) . toBe ( ` frame[name="bar"] ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-23 16:24:45 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-25 18:43:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-30 21:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should work with tricky attributes' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-25 18:43:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button id="this:is-my-tricky.id"><span></span></button> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-30 21:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '[id="this\\:is-my-tricky\\.id"]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <ng:switch><span></span></ng:switch> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'ng\\:switch' ) ) . toBe ( 'ng\\:switch' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button><span></span></button><button></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . $eval ( 'button' ,  button  = >  button . setAttribute ( 'aria-label' ,  ` !#'!?: ` ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-11 15:58:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( ` internal:role=button[name="!#'!?:"i] ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-04 13:21:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  page . $ ( ` role=button[name="!#'!?:"] ` ) ) . toBeTruthy ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-30 21:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div><span></span></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . $eval ( 'div' ,  div  = >  div . id  =  ` !#'!?: ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'div' ) ) . toBe ( "[id=\"\\!\\#\\'\\!\\?\\:\"]" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-25 18:43:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 17:24:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should work without CSS.escape' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button role="presentation" aria-hidden="false"></button> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 17:24:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . $eval ( 'button' ,  button  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      delete  window . CSS . escape ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      button . setAttribute ( 'name' ,  '-tricky\u0001name' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( ` button[name="-tricky \\ 1 name"] ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-22 16:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should ignore empty aria-label for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button aria-label="" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '#buttonId' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should accept valid aria-label for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button aria-label="ariaLabel" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-11 15:58:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( 'internal:role=button[name=\"ariaLabel\"i]' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-22 16:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should ignore empty role for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button role="" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '#buttonId' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should not accept invalid role for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-22 16:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button role="roleDescription" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-03 07:44:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '#buttonId' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-22 16:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should ignore empty data-test-id for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button data-test-id="" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '#buttonId' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should accept valid data-test-id for candidate consideration' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <button data-test-id="testId" id="buttonId"></button> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( '[data-test-id="testId"]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-05 11:02:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it ( 'should generate label selector' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <label for=target>Country</label><input id=target> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:label="Country"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-05 11:02:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <label for=target>Coun"try</label><input id=target> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 16:09:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:label="Coun\\\"try"i' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-05 11:02:15 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-09 17:22:13 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should prefer role other input[type]' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <input type=checkbox><div data-testid=wrapper><input type=checkbox></div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  '[data-testid=wrapper] > input' ) ) . toBe ( 'internal:testid=[data-testid="wrapper"s] >> internal:role=checkbox' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-28 19:55:34 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate title selector' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` <div>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < button  title = "Send to" > Send < / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < button > Send < / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / div > ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'button' ) ) . toBe ( 'internal:attr=[title=\"Send to\"i]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-22 20:54:04 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate exact text when necessary' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < span > Text < / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < span > Text  and  more < / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'span' ) ) . toBe ( 'internal:text=\"Text\"s' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate exact title when necessary' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < span  title = "Text" > < / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < span  title = "Text and more" > < / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'span' ) ) . toBe ( 'internal:attr=[title=\"Text\"s]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate exact placeholder when necessary' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < input  placeholder = "Text" > < / input > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < input  placeholder = "Text and more" > < / input > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:attr=[placeholder=\"Text\"s]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate exact role when necessary' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < img  alt = "Text" > < / img > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < img  alt = "Text and more" > < / img > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'img' ) ) . toBe ( 'internal:role=img[name=\"Text\"s]' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it ( 'should generate exact label when necessary' ,  async  ( {  page  } )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . setContent ( ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < label > Text  < input > < / input > < / label > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < label > Text  and  more  < input > < / input > < / label > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ` );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( await  generate ( page ,  'input' ) ) . toBe ( 'internal:label=\"Text\"s' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-23 12:44:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ) ;