2016-11-06 2 views
6

Ich schreibe einen Komponententest, um die Tabulatorreihenfolge auf meiner Webseite zu testen, und ich konnte keine Möglichkeit finden, die Benutzerabfrage des TAB-Schlüssels zu simulieren, um auf das nächste fokussierbare Element zu fokussieren, obwohl dies eine einfache Aufgabe zu sein scheint.Gibt es eine Möglichkeit, den TAB-Schlüssel programmgesteuert auszulösen, um den Fokus auf das nächste fokussierbare Element zu verschieben?

jQuery ist erlaubt, während reine JavaScript-Lösung bevorzugt wird. Jede Art von Hilfe wird geschätzt.

// TODO 
 
function triggerTab() { 
 

 

 
} 
 

 
$("#btn-save").focus(); 
 
triggerTab(); 
 

 
// Expect the focus is on the cancel button now. 
 
console.log(document.activeElement.id);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<p> some text </p> 
 
<button id="btn-save"> save </button> 
 
<button id="btn-cancel> cancel </button>

P. S. Es ist nicht akzeptabel, focus() für das nächste fokussierbare Element aufzurufen, selbst wenn Sie Code schreiben können, um das nächste fokussierbare Element herauszufinden. Also dieser Weg ist nicht das, was ich will:

function getAllFocusables() { 
    ... 
} 

var focusables = getAllFocusables(), 
    index = focusables.indexOf(document.activeElement); 

$(focusables[index+1]).focus(); 
+0

Nein emulieren gibt es keine Möglichkeit, die Tab-Taste auslösen, Aber es gibt eine Möglichkeit, das nächste fokussierbare Element im DOM zu finden und es zu fokussieren. Vielleicht, was auch immer Sie verwenden, um dies zu testen, hat eine Möglichkeit, Schlüssel auszulösen, ich weiß es nicht, ich werde niemals einfache Event-Handler testen. – adeneo

+2

Warum möchten Sie NICHT die einfachere Methode verwenden, um direkt zu fokussieren, was Sie wollen? – vlaz

+1

@vlaz Da dies für den Komponententest eines Moduls in meinem Projekt ist, hat das Modul js-Code, um die Tab-Reihenfolge mit der gleichen Idee zu verwalten, was ich am Ende der Frage gestellt habe. Ich denke, es ist albern, den gleichen Modulcode zu verwenden, um sich selbst zu testen. Deshalb möchte ich es auf diese Weise testen, ein Markup einrichten, die Registerkarten programmgesteuert auslösen und prüfen, ob die Tab-Reihenfolge wie erwartet ist. –

Antwort

4

Sie können keine Tabulatortaste von einem Standard-Browser simulieren mit Javascript.

Wenn Sie Ihr Gerät zu testen tun eine Maden Browser, wie phantomjs zum Beispiel können Sie die Tabulatortaste

var webPage = require('webpage'); 
var page = webPage.create(); 

page.sendEvent('keypress', page.event.key.Tab); 
Verwandte Themen