41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| class Console {
 | |
|   constructor(session) {
 | |
|     this.session = session;
 | |
|   }
 | |
| 
 | |
|   async sendKeys(...keys) {
 | |
|     let input = await this.session.findElementByCSS('input');
 | |
|     input.sendKeys(...keys);
 | |
|   }
 | |
| 
 | |
|   async currentValue() {
 | |
|     return await this.session.executeScript(() => {
 | |
|       let input = document.querySelector('input');
 | |
|       return input.value;
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   async getCompletions() {
 | |
|     return await this.session.executeScript(() => {
 | |
|       let items = document.querySelectorAll('.vimvixen-console-completion > li');
 | |
|       if (items.length === 0) {
 | |
|         throw new Error('completion items not found');
 | |
|       }
 | |
| 
 | |
|       let objs = [];
 | |
|       for (let li of items) {
 | |
|         if (li.classList.contains('vimvixen-console-completion-title')) {
 | |
|           objs.push({ type: 'title', text: li.textContent.trim() });
 | |
|         } else if ('vimvixen-console-completion-item') {
 | |
|           let highlight = li.classList.contains('vimvixen-completion-selected');
 | |
|           objs.push({ type: 'item', text: li.textContent.trim(), highlight });
 | |
|         } else {
 | |
|           throw new Error(`unexpected class: ${li.className}`);
 | |
|         }
 | |
|       }
 | |
|       return objs;
 | |
|     });
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = Console;
 |