Ваш код работает нормально, только не в jsFiddle или в фрейме фрагмента переполнения стека.
Причина в том, что когда вы нажимаете кнопку «Выполнить», вы фактически делаете акцент на другой странице (другом элементе окна). Таким образом, после того, как тайм-аут имитирует нажатие кнопки, ваш элемент хорошо сфокусирован, а ваша страница - нет, поэтому вы его не видите.
Вы можете попробовать установить задержку на 5 секунд, затем щелкнуть в любом месте окна предварительного просмотра до того, как тайм-аут имитирует щелчок, и вы увидите, что ваш ввод будет фокусироваться точно так же, как при нажатии на кнопку. Вы также можете получить доступ к текущему сфокусированному элементу с помощью document.activeElement
var input = document.querySelector("input");
var btn = document.querySelector("#btn");
console.log('active element:', document.activeElement);
btn.addEventListener("click", function(event) {
//when triggered by a mouse click on the button, produces desired result
console.log("click");
input.focus();
});
setTimeout(function(e) {
var event = new Event("click");
//does not produce desired result
btn.dispatchEvent(event);
//does not produce desired result
btn.click();
console.log('active element:', document.activeElement);
}, 5000);
<input type="text" />
<button id="btn">
button
</button>