Перейти к содержимому

Фотография

Возможно ли отследить нажатие клавиши клавиатуры?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 29 декабря 2015 - 20:05

Ситуация такая: создаю объект WebDriver, открываю web-страницу и пытаюсь производить некоторые действия (например вывести какое-либо сообщение) при нажатии определенной клавиши. Например, нажимаешь F1 - выводится сообщение такое-то. Возможно ли это реализовать? Т.е. средствами Java сделать примерно то то же, что на Javascript можно сделать так:

addEventListener('keydown', function(event) {
  if (event.keyCode == 112) {
    document.body.style.background = 'violet';}
}

  • 0

#2 serjb9

serjb9

    Новый участник

  • Members
  • Pip
  • 68 сообщений

Отправлено 30 декабря 2015 - 04:30

Заставьте драйвер нажимать на F1 посредством sendKeys (webElement.sendKeys(Keys.F1)) .

Потом проверяйте в коде наличие появившегося элемента. Через webElement.isDisplayed(), например


  • 1

#3 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 30 декабря 2015 - 10:44

Заставьте драйвер нажимать на F1 посредством sendKeys (webElement.sendKeys(Keys.F1)) .

Потом проверяйте в коде наличие появившегося элемента. Через webElement.isDisplayed(), например

Нет, проблема состоит именно в реагировании на нажатие клавиши (например, F1). Т.е., есть код на Java с использованием WebDriver. В нем цикл, в котором используется отслеживание нажатия клавиш клавиатуры, либо назначается слушатель соответствующего события, и при нажатии клавиши F1 код соответствующим образом реагирует.


  • 0

#4 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 30 декабря 2015 - 11:36

Как вы себе это представляете? 

Запускаете АВТОтест, который какое-то время ждет - вдруг вы сами лично (руками) нажмете F1 - и тогда-то он и заработает, проверит код и т.д.? Или F1 должна все таки как-то автоматически нажаться?

Селениум - автоматизирует действия пользователя (т.е. может что-то сделать и проверить результат), а не работает в фоне, реагируя на какие либо внешние события.

То, что предложил serjb9 - делает то, что вы хотите проверить. САМОСТОЯТЕЛЬНО нажимает F1 и ищет нужный элемент (в данном случае, поиск элемента с нужным сообщением, при правильно написанном локаторе = проверке изменения кода).

 

Например.

int size = driver.findElements(By.cssSelector("body[style*='violet']").size();

ДО нажатия кнопки F1 size д.б. равен 0, ПОСЛЕ > 0.


  • 0

#5 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 30 декабря 2015 - 11:56

Как вы себе это представляете? 

Запускаете АВТОтест, который какое-то время ждет - вдруг вы сами лично (руками) нажмете F1 - и тогда-то он и заработает, проверит код и т.д.? Или F1 должна все таки как-то автоматически нажаться?

Селениум - автоматизирует действия пользователя (т.е. может что-то сделать и проверить результат), а не работает в фоне, реагируя на какие либо внешние события.

То, что предложил serjb9 - делает то, что вы хотите проверить. САМОСТОЯТЕЛЬНО нажимает F1 и ищет нужный элемент (в данном случае, поиск элемента с нужным сообщением, при правильно написанном локаторе = проверке изменения кода).

 

Например.

int size = driver.findElements(By.cssSelector("body[style*='violet']").size();

ДО нажатия кнопки F1 size д.б. равен 0, ПОСЛЕ > 0.

Это не тест и преследуются там другие цели, результаты которых используются в последующем тестировании.


  • 0

#6 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 30 декабря 2015 - 12:10

Вы не ответили на вопрос - как вы предполагаете это использовать? Сидеть и руками F1 нажимать в нужный момент?


  • 0

#7 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 30 декабря 2015 - 12:46

Вы не ответили на вопрос - как вы предполагаете это использовать? Сидеть и руками F1 нажимать в нужный момент?

Совершенно верно. Нажать рукой клавишу F1->отследить это нажатие ->предпринять соответствующие действия. При чем здесь WebDriver? Ну, потому что нужен еще механизм с удобным поиском и работой с элементами web-страницы. А в принципе, это скорее вопрос по Java. А в ней, насколько я понимаю, весьма проблематично перехватывать нажатие клавиш в консольном приложении. Вот только я сомневаюсь, является ли приложение, написанное с использованием WebDriver консольным, или все таки в нем подобные механизмы есть? В принципе, вопрос решается на Javascript, но тут возникает другая проблема, связанная с тем, что он не может использовать файловую систему. Может быть есть возможность передать значение переменной из скрипта Javascript в код на Java в рамках одной программы?


  • 0

#8 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 30 декабря 2015 - 16:58

driver.executeScript("<код листенера на keyup>")
Это имел в виду?
  • 0

#9 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 31 декабря 2015 - 08:40

driver.executeScript("<код листенера на keyup>")
Это имел в виду?

 

Ну да. И в этом коде листенера

addEventListener('keydown', function(event) {
if (event.keyCode == 112) {
var x = 1;
}

А вот как теперь это значение x передать Java? Может можно его каким-либо образом сделать глобальным так чтобы юзали и Java, и Javascript?


  • 0

#10 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 31 декабря 2015 - 11:43

А вот как теперь это значение x передать Java? Может можно его каким-либо образом сделать глобальным так чтобы юзали и Java, и Javascript?

Создать элемент в DOM-дереве со значением x и искать его средствами WebDriver.
  • 0

#11 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 31 декабря 2015 - 12:04

 

А вот как теперь это значение x передать Java? Может можно его каким-либо образом сделать глобальным так чтобы юзали и Java, и Javascript?

Создать элемент в DOM-дереве со значением x и искать его средствами WebDriver.

 

Да именно такая мысль в голову и пришла, но как-то неправильно это. И работает очень медленно. Я создал элемент типа textarea. Записываю туда при помощи Javascript, а считываю WebDriver-ом. Собственно, создано даже 2 таких поля. В одном нужная для сохранения информация, а другое - просто флаг. По умолчанию поле флага имеет значение 0, если нужно сохранить данные, то нажимаем F1, при этом значение флага изменяется на 1. Сканирующий поле флага WebDriver видит это и считывает нужную информацию, которая хранится в textarea. Если в поле флага передается значение 2 (например, при нажатии клавиши  F2), то происходит выход из цикла сканирования и работа заканчивается. Однако работает все это медленно и неэффективно. Значение поля флага почему-то считывается не всегда. Например, если ввести в цикле вывод сообщения с информацией о состоянии флага, то происходит следующее: Ставим задержку в цикле сканирования 2 сек. Исходное значение поля флага 0. Сообщение выводит правильное состояние. Нажимаем F1, видим, что значение флага изменилось на 1, но сообщение все равно выводит 0, со второго раза выводит уже 1. Если убрать задержку в цикле сканирования и вывод сообщений, то изменение состояния флага вообще не отслеживается. Ну в общем как-то неправильно.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных