Моделирование горячих клавиш в функциональных тестах Intern (3)

Я пытаюсь проверить некоторые горячие клавиши на своем сайте. Ввод Ctrl+5 в поле должен что-то делать. Я делаю:

command.get(...)
    ...
    .findByCssSelector('input')
    .click()
    .pressKeys([keys.CONTROL, '5'])
    .pressKeys(keys.NULL)
    .end()

Кажется, у меня странные результаты в IE. В моем обработчике нажатия клавиш я регистрирую событие и получаю следующее:

{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: false, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "Control", keyCode: 17 ...}
{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: false, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "5", keyCode: 53 ...}

Обратите внимание, что ctrlKey имеет значение false, поэтому моя горячая клавиша не работает. Вот что я получаю, когда набираю Ctrl + 5 вручную:

{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: true, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "Control", keyCode: 17 ...}
{altKey: false, bubbles: true, button: undefined, buttons: undefined, cancelable: true, changedTouches: undefined, char: "", charCode: 0, clientX: undefined, clientY: undefined, ctrlKey: true, currentTarget: HTMLInputElement {...}, data: undefined, delegateTarget: HTMLInputElement {...}, detail: 0, eventPhase: 2, handleObj: Object {...}, isSimulated: false, jQuery311042854121322469546: true, key: "5", keyCode: 53 ...}

Что мне не хватает?


person sheodox    schedule 08.01.2018    source источник


Ответы (1)


У вас есть несколько вещей, которые я хотел бы предложить здесь.

Первый относится к использованию вами CTRL в вашем методе pressKeys. Взгляните на документацию Leadfoot:

https://theintern.io/leadfoot/module-leadfoot_keys.html

На клавишу CTRL ссылаются с помощью keys.CONTROL.

Другое предложение, которое я бы сделал (основываясь на собственном опыте использования Intern), заключается в том, что вы должны включать все нажатия клавиш в один массив. Прямо сейчас у вас есть две строки следующим образом:

.pressKeys([keys.CTRL, '5'])
.pressKeys(keys.NULL)

Я обнаружил, что произойдет то, что вам нужно, чтобы все они содержались в одном массиве, например:

.pressKeys([keys.CONTROL, '5', keys.NULL])

Следует отметить, что у некоторых людей есть индивидуальные события pressKeys, и, похоже, у них это работает. Для меня, когда я хотел сделать такие сочетания клавиш, я никогда не мог заставить это работать.

В дополнение к этому, другой предлагаемый набор нажатий клавиш выглядит следующим образом — это будет нажимать обе клавиши, которые вы хотите, а затем снова отпускать их:

.pressKeys([keys.CONTROL, '5', '5', keys.CONTROL)

Обновление 1:

Одна вещь, на которую вы должны обратить внимание (и это то, что недавно затронуло меня, поэтому я сказал, что предлагаю это здесь, пока это свежо в моей памяти), — это убедиться, что ваш capabilities настроен для обеспечения поддержки событий клавиатуры. Есть несколько способов сделать это.

Во-первых, вы можете установить глобальную настройку capabilities следующим образом:

"capabilities": {
  ...
  "fixSessionCapabilities": true
}

Это автоматически решит многие проблемы со средой, прежде чем будут запущены какие-либо тесты. Однако я обнаружил, что глобальное использование этого параметра как true может привести к нежелательному поведению в вашей среде, поэтому другой альтернативой этому является установка того, что вам нужно, в отдельной среде по мере необходимости.

Например, кажется, что ваши события клавиатуры не работают, поэтому вы можете попросить свою конфигурацию попытаться исправить это, когда тесты IE выполняются следующим образом:

"environments": [
  ...
  {
    "browserName": "internet explorer",
    "brokenSendKeys": true
  }
]

Если вы хотите просмотреть и попробовать любые другие потенциальные настройки, подобные этой, вы можете найти их все в разделе Globals документации Leadfoot следующим образом:

https://theintern.io/leadfoot/global.html

person AJC24    schedule 09.01.2018
comment
Упс, на самом деле я использую keys.CONTROL, я просто опечатался в ОП. - person sheodox; 10.01.2018
comment
Я только что обновил свой комментарий другим предложением для вас. Не уверен, что у вас все еще есть эта проблема, поэтому сказал, что поделюсь этим на всякий случай. Надеюсь, поможет! - person AJC24; 17.01.2018