У меня есть код, который ищет указанную клавишу на экранной клавиатуре и нажимает ее при обнаружении. Я столкнулся с проблемой, когда иногда свойство Exists не существует, и это приводит к сбою моего теста.
function findKey(propertyName, character, shiftMode) {
var keyboard = getKeyboard()
var key = keyboard.findChild(propertyName, character, 2)
if (key.Exists) { // Crashes on this line.
keyboard.set_ShiftMode(shiftMode)
key.Click()
return true
}
return false
}
Действительно сумасшедшая вещь заключается в том, что когда я добавляю точку останова в эту строку и проверяю ее в инспекторах, у инспектора Locals есть свойство, но Watch List говорит, что его не существует. Кроме того, это не супер последовательно. До сих пор это происходило либо с первым, либо со вторым символом в строке.
Местные жители
Список наблюдения
Журнал ошибок
Что может быть причиной того, что свойство не существует в некоторых ситуациях кода? Я думал, что Existsвсегда возвращается от findChild специально, чтобы вы могли знать, вернулось ли что-нибудь.
Что происходит в getKeyboard()?
Вероятно, потому что key не определено. А вы пробовали if (key && key.Exists) { }?
Мы не сможем вам помочь без журнала ошибок и минимальный воспроизводимый пример
Попробуйте также реорганизовать эту строку, чтобы использовать запись в квадратных скобках вместо записи через точку: if (key['Exists']) { }. Также, в зависимости от того, что возвращает findChild, вы можете добавить проверку: if (typeof key === 'object' && key['Exists']) { }
Я добавил журнал ошибок. @Wimanicesir есть несколько разных страниц с клавиатурой, поэтому эта функция будет искать ту, которая активна, и возвращать клавиатуру со страницы.
@kemicofa if (key && key.Exists) не сработал, потому что он все еще того же класса, что и другие, у которых есть Exists. Другие свойства и функции все еще существуют, и я ожидаю, что это тип класса.
Мое предположение (и это предположение, а не реальный ответ) состоит в том, что @kemicofa прав. Я не понимаю вашего ответа на его комментарий. Если keyboard.findChild(...) возвращает "undefined" или "null", тогда ваш код выйдет из строя. Каково значение «ключа» в момент сбоя вашего кода? Это определено? Ненулевой?
@Duncan Объект определен. Просто отсутствует это свойство. У него все еще есть другие свойства и функции, которые есть у других клавиш с Exist.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как насчет использования свойств Visible или VisibleOnScreen?
Также стоит попробовать записать в KeyWord Test, а потом конвертировать в скрипт.
Запись теста не даст мне желаемых результатов. Существует функция, которая получает строку, разбивает ее на символы и использует эту функцию для ввода этого символа, если он может быть найден. Он предназначен для использования во многих местах, поэтому он должен быть динамичным.
Даже если это
undefined, он не должен падать. Какую ошибку вы получаете?