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

Фотография

Работа awt.robot в фоновом режиме


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

#1 kotor

kotor

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

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

Отправлено 27 февраля 2012 - 17:59

Добрый день!

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

В процессе настройки CI столкнулся с такой проблемой:
После билда (используем TeamCity в качестве CI сервера) получаем интересную картину – тесты падают при обращении к классу Robot. Т.е. все, что до этого делает webdriver, выполняется правильно.
Подскажите, пожалуйста, каким образом можно решить эту проблему?
Возможно, кто-то знает альтернативу роботу? Чтобы класс мог работать с низкоуровневыми операциями, но при этом, мог выполнять их в фоне.
Всем спасибо.
  • 0

#2 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 28 февраля 2012 - 08:47

Добрый день!

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

В процессе настройки CI столкнулся с такой проблемой:
После билда (используем TeamCity в качестве CI сервера) получаем интересную картину – тесты падают при обращении к классу Robot. Т.е. все, что до этого делает webdriver, выполняется правильно.
Подскажите, пожалуйста, каким образом можно решить эту проблему?
Возможно, кто-то знает альтернативу роботу? Чтобы класс мог работать с низкоуровневыми операциями, но при этом, мог выполнять их в фоне.
Всем спасибо.


Добрый день.

А с какой ошибкой падает? Падает при создании объекта класса Robot или при вызове каких-то методов?
  • 0

#3 kotor

kotor

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

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

Отправлено 28 февраля 2012 - 09:25


Добрый день!

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

В процессе настройки CI столкнулся с такой проблемой:
После билда (используем TeamCity в качестве CI сервера) получаем интересную картину – тесты падают при обращении к классу Robot. Т.е. все, что до этого делает webdriver, выполняется правильно.
Подскажите, пожалуйста, каким образом можно решить эту проблему?
Возможно, кто-то знает альтернативу роботу? Чтобы класс мог работать с низкоуровневыми операциями, но при этом, мог выполнять их в фоне.
Всем спасибо.


Добрый день.

А с какой ошибкой падает? Падает при создании объекта класса Robot или при вызове каких-то методов?


Здравствуйте!

Падает в том месте, где идет проверка нарисованной фигуры. Т.е. я выбираю инструмент для рисования (это делается средствами webdriver'a, поэтому проблем в этом месте не возникает), далее эстафету перенимает робот и с помощью низкоуровневых операций он должен нарисовать определенный объект. Последнего, в результате, не происходит. Следующим, после рисования, шагом является проверка нарисованного объекта, а т.к. объекта нет - тест падает с ошибкой вебдрайвера (can't find element).

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

Главная задача сейчас - найти способ работать с роботом в фоновом режиме. Если нет, то найти альтернативу. Можно конечно использовать класс Actions (из API webdriver'a), но это для решения задач текущего проекта не является оптимальным решением, есть определенные подводные камни.
  • 0

#4 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 28 февраля 2012 - 10:12



Добрый день!

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

В процессе настройки CI столкнулся с такой проблемой:
После билда (используем TeamCity в качестве CI сервера) получаем интересную картину – тесты падают при обращении к классу Robot. Т.е. все, что до этого делает webdriver, выполняется правильно.
Подскажите, пожалуйста, каким образом можно решить эту проблему?
Возможно, кто-то знает альтернативу роботу? Чтобы класс мог работать с низкоуровневыми операциями, но при этом, мог выполнять их в фоне.
Всем спасибо.


Добрый день.

А с какой ошибкой падает? Падает при создании объекта класса Robot или при вызове каких-то методов?


Здравствуйте!

Падает в том месте, где идет проверка нарисованной фигуры. Т.е. я выбираю инструмент для рисования (это делается средствами webdriver'a, поэтому проблем в этом месте не возникает), далее эстафету перенимает робот и с помощью низкоуровневых операций он должен нарисовать определенный объект. Последнего, в результате, не происходит. Следующим, после рисования, шагом является проверка нарисованного объекта, а т.к. объекта нет - тест падает с ошибкой вебдрайвера (can't find element).

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

Главная задача сейчас - найти способ работать с роботом в фоновом режиме. Если нет, то найти альтернативу. Можно конечно использовать класс Actions (из API webdriver'a), но это для решения задач текущего проекта не является оптимальным решением, есть определенные подводные камни.


Вероятнее всего проблема в отсутствии пользовательской сессии с desktop-ом на тестируемой машине. Эта проблема не только Robot, но и многих других схожих инструментов.

На ум приходят два решения:

1) Настроить CI таким образом, чтобы при выполнении тестов на машине была сессия с desktop;
2) Попробовать рисовать не с помощью Robot, а с помощью API браузера/окна браузера.

Вот здесь примерно описана суть проблемы работы с графикой при удаленном выполнении тестов:

http://stackoverflow...s-a-black-image
http://stackoverflow...pturescreenshot

+ google в помощь
  • 2

#5 kotor

kotor

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

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

Отправлено 28 февраля 2012 - 10:34

Вероятнее всего проблема в отсутствии пользовательской сессии с desktop-ом на тестируемой машине. Эта проблема не только Robot, но и многих других схожих инструментов.

На ум приходят два решения:

1) Настроить CI таким образом, чтобы при выполнении тестов на машине была сессия с desktop;
2) Попробовать рисовать не с помощью Robot, а с помощью API браузера/окна браузера.

Вот здесь примерно описана суть проблемы работы с графикой при удаленном выполнении тестов:

http://stackoverflow...s-a-black-image
http://stackoverflow...pturescreenshot

+ google в помощь


Спасибо за Ваш ответ. Собственно, эти варианты мы тоже рассматривали/рассматриваем, особенно 1-й)).
  • 0

#6 astafev

astafev

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

  • Members
  • Pip
  • 42 сообщений
  • ФИО:Евгений

Отправлено 25 апреля 2012 - 11:10

Спасибо за Ваш ответ. Собственно, эти варианты мы тоже рассматривали/рассматриваем, особенно 1-й)).

Чем все закончилось? У меня похожая проблема если тесты выполняет Build Agent, установленный как служба.
Только валится он вообще неожиданно: при заполнении формы, не может найти кнопку с id='finish'. Если выполнять на установленном не как служба Build Agent'е - все работает.
  • 0


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

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