Как пользоваться Text Recognition
#1
Отправлено 14 января 2012 - 12:11
#2
Отправлено 14 января 2012 - 14:52
В окне тестируемой программы выводится текст, который не отображается ни в одном из свойств данного окна или его элементов. Для распознавания текста пытался воспользоваться возможностями OCR, но этот метод текст (латинский алфавит) корректно не распознает. В help-е сказано, что с такой задачей значительно лучше справляется плагин Text Recognition. Однако их help, имхо создан не для помощи, а для разгадывания ребусов. Один абзац Генкиной книги делает совершенно понятным как использовать распознавание текста с помощью OCR, но к сожалению, там не описано применение Text Recognition. Обращаюсь к автору: не сочтете ли за труд изложить, как с помощью этого плагина прочитать текст из окна?
Зайдите в свойства проекта (правой кнопкой на проекте Edit|Properties) . Перейдите в меню Open Applications|Text Recognition
Нажмите Add и введите значение нужного WndClassa . Поставте галочку и сохраните.
Теперь все текстовые элементы вашего объекта доступны
#3
Отправлено 14 января 2012 - 15:29
В окне тестируемой программы выводится текст, который не отображается ни в одном из свойств данного окна или его элементов. Для распознавания текста пытался воспользоваться возможностями OCR, но этот метод текст (латинский алфавит) корректно не распознает. В help-е сказано, что с такой задачей значительно лучше справляется плагин Text Recognition. Однако их help, имхо создан не для помощи, а для разгадывания ребусов. Один абзац Генкиной книги делает совершенно понятным как использовать распознавание текста с помощью OCR, но к сожалению, там не описано применение Text Recognition. Обращаюсь к автору: не сочтете ли за труд изложить, как с помощью этого плагина прочитать текст из окна?
Зайдите в свойства проекта (правой кнопкой на проекте Edit|Properties) . Перейдите в меню Open Applications|Text Recognition
Нажмите Add и введите значение нужного WndClassa . Поставте галочку и сохраните.
Теперь все текстовые элементы вашего объекта доступны
Да это то как раз понятно, а нельзя ли привести пример как конкретно распознать и сохранить в логе текст из какого-нибудь окна.
#4
Отправлено 14 января 2012 - 16:29
В Project Properties ->Open Applications->Text Recognition отметил *. Иконки всех окон в Object Browser выглядят как надо для распознавания. В качестве window выбрал текстовое поле тестируемой программы, куда заранее ввел "ABCDE". Никакой графики - чистый шрифт. Попробовал:
window = window = Sys.Process("....").Window("...., "....");
TextObject = window.TextObject("*");
Log.Message(TextObject.Text);
но получаю ошибку Unable to find the object TextObject("*"). Т.е., как я понимаю, в данном окне текст не находится. Проверил таким же образом для Notepad - работает нормально, распознает даже кириллицу.
Пробую распознать при помощи OCR, там вообще глухо - получаю какие-то символы типа .`.. :::.
Вызвал из скрипта Клептоманию - распознает без всяких проблем любой текст - и тот о котором говорилось выше и более сложный графический. Можно сохранить в буфер памяти. Но это же нонсенс - использовать стороннюю программу для выполнения функций, которые должны быть доступны из самой TestComplete.
#5
Отправлено 15 января 2012 - 09:19
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.
А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:
- включена классическая тема Windows
- отключен ClearType
- отключено сглаживание экранных шрифтов
Ну и приаттачьте скриншот окна с вашим контролом
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#6
Отправлено 15 января 2012 - 10:18
Я добавил в учебник описание того, как работать с Text Recognition (http://tctutorial.ru/ocr), но вам это не поможет.
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.
А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:
- включена классическая тема Windows
- отключен ClearType
- отключено сглаживание экранных шрифтов
Ну и приаттачьте скриншот окна с вашим контролом
Спасибо! Последовал Вашим советам. Ситуация с OCR значительно улучшилась (хотя отображение шрифтов, конечно, пострадало). Теперь распознает, хотя и с некоторыми погрешностями. Что же касается Text Recognition, то как Вы и предполагали, - никаких сдвигов (см. скриншот) ScreenShot.jpg 111,49К 26 Количество загрузок:.
#7
Отправлено 15 января 2012 - 12:31
Решите проблему с распознаванием контролов и вам не придется так мучаться.
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#8
Отправлено 15 января 2012 - 16:12
Главное, что надо непременно указывать размер шрифта, его тип, стиль. Кроме этого, я еще указываю область объекта в которой надо распознать текст.
' The sample application demonstrates how to: ' 1) Find areas by specified text in an owner-drawn control. ' 2) Recognize text in a specified area. ' ' Compile the sample application (<TestComplete>\Samples\Scripts\OCR\Application\OCRApp.dpr). ' ' The "Tahoma" font must be installed in your system in order for the sample ' to work correctly. Sub MainTest Const TextToFind = "E-mail" Set wForm = Sys.Process("OCRApp").Window("TForm1", "OCR Application") ' Part 1. Find the item coordinates (x, y) in the owner-drawn list box and click ' the found point. Set wOfficeListBox = wForm.Window("TListBox") Set Pic = wOfficeListBox.Picture(0, 0, wOfficeListBox.Width, wOfficeListBox.Height, false) Call Log.Picture(Pic, "The image of the owner-draw list box.") Set OCRObjList = OCR.CreateObject(Pic) Set OCROptionsList = OCRObjList.CreateOptions Set FontItem = OCROptionsList.Fonts.Add FontItem.Name = "Tahoma" Call FontItem.Sizes.Add(12) ' Call the FindRectByText function with its default options. ' In the list box, the Courier New font is used (it is applied by the OCR ' object by default), so there is no need to specify recognition options. FindRes = OCRObjList.FindRectByText("E-mail", OCROptionsList) If FindRes Then Call Log.Message("The coordinates of the center of the found area. FoundX = " +_ aqConvert.IntToStr(OCRObjList.FoundX) + "; FoundY = " + aqConvert.IntToStr(OCRObjList.FoundY) + ".") ' Click the found item. Call wOfficeListBox.Click(OCRObjList.FoundX, OCRObjList.FoundY) ' Pause the script execution here to enable the application to display the ' clicked item in the edit box. Call Delay(1000) Else Call Log.Error("Failed to find the rectangle by text.") End If ' Part 2. Recognize new text in the edit box. Set wOfficeEditBox = wForm.Window("TEdit", "*") Set Pic = wOfficeEditBox.Picture(0, 0, wOfficeEditBox.Width, wOfficeEditBox.Height, false) Call Log.Picture(Pic, "The image of the edit box.") Set OCRObjWord = OCR.CreateObject(Pic) ' In the edit box, the Tahoma font is used. It is not applied by default, ' so we need to specify recognition options here. Set OCROptionsWord = OCRObjWord.CreateOptions ' Add font to the Options object. Set FontItem = OCROptionsWord.Fonts.Add ' Specify the font name. FontItem.Name = "Tahoma" ' Add the font size. Call FontItem.Sizes.Add(14) ' Add the bold style. Call FontItem.Styles.Add(1) ' Call the GetText function with the specified options. Call Log.Message("Recognized word: " + OCRObjWord.GetText(OCROptionsWord)) Call TestedApps.CloseAll End Sub
#9
Отправлено 15 января 2012 - 16:16
Ну так это же та самая история с .NET приложением, которое неправильно распознается. У вас и дальше будут проблемы, чем дальше - тем больше.
Решите проблему с распознаванием контролов и вам не придется так мучаться.
А решить можно переходом на 8-ю версию ИЛИ путем установки рекомендованных Вами DLL. Правильно я понимаю?
#10
Отправлено 15 января 2012 - 16:27
Попробуйте воспользоваться идеями, которые приведены в TC_SAMPLE. Он мне помог решить проблемы с OCR
Главное, что надо непременно указывать размер шрифта, его тип, стиль. Кроме этого, я еще указываю область объекта в которой надо распознать текст.
Спасибо. Но если, действительно все так сложно, то может быть, проще воспользоваться специализированной программкой Kleptomania, которая без проблем читает все без учета сглаживания, разных шрифтов и других нюансов. Например так:
function Kleptomania(WindowName, AreaWidth, AreaHeight) { //Функция использования программы Клептомания для распознавания текста с экрана //Параметр функции, представляющий из себя имя окна в котором производится распознавание текста (просто скопировать // и вставить из Object Properties) var wnd = WindowName; //Координаты x и y верхнего левого угла окна (являются свойствами окна) var x = wnd.ScreenLeft; var y= wnd.ScreenTop; //Переменные для извлечения программы Клептомания из трея var explorer; var wndShell_TrayWnd; var k_mania; var wndKmaniaexeCoat; //Переменная процесса Explorer explorer = Aliases.Explorer; //Переменная трея wndShell_TrayWnd = explorer.wndShell_TrayWnd; //Кликаем по кнопке трея wndShell_TrayWnd.btn.ClickButton(); //Извлекаем из трея значок программы Клептомания explorer.wndNotifyIconOverflowWindow.ToolbarWindow32.ClickItem("Kleptomania!", false); k_mania = Aliases.k_mania; //Выбираем способ выделения области экрана - Select Text/Graphic Rectangle k_mania.wnd32768.Select_Text_Graphics_Rectangle.Click(); //Производим выделение области экрана с координатами левого верхнего угла окна, а также ширины (AreaWidth) и //высоты (AreaHeight) выделяемой области в пикселах wndKmaniaexeCoat = k_mania.wndKmaniaexeCoat; wndKmaniaexeCoat.Drag(x, y, AreaWidth, AreaHeight); //Выбираем способ сохранения распознанного текста в Clip Board - Plain Text wndKmaniaexeCoat.PopupMenu.Click("Copy|Plain Text"); delay(1000); //Возвращаемое значение функции return Sys.Clipboard; }
#11
Отправлено 15 января 2012 - 16:51
По крайней мере в sample не используется дополнительная программа для распознавания, а приведен пример, как распознавать.
Но соглашусь, что OCR-механизм распознавания TC несовершенен и не все тексты ему "по зубам"..
#12
Отправлено 15 января 2012 - 17:19
А решить можно переходом на 8-ю версию ИЛИ путем установки рекомендованных Вами DLL. Правильно я понимаю?
Да. Либо сносом некоторых обновлений .NETa.
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#13
Отправлено 23 января 2012 - 10:28
Я добавил в учебник описание того, как работать с Text Recognition (http://tctutorial.ru/ocr), но вам это не поможет.
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.
А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:
- включена классическая тема Windows
- отключен ClearType
- отключено сглаживание экранных шрифтов
Ну и приаттачьте скриншот окна с вашим контролом
Доброго времени суток.
Гена, а что такое ClearType и сглаживание экранных шрифтов? и где это отключить?
#14
Отправлено 23 января 2012 - 11:41
Доброго времени суток.
Гена, а что такое ClearType и сглаживание экранных шрифтов? и где это отключить?
Clear Type - в панели инструментов (Win 7) в строке поиска напишите Clear Type и кликните на сслыке Adjust Clear Type
Экранные шрифты - жмете Win+Pause, потом Advanced System Settings - Advanced - Performance - Visual effects
и там будет галочка Smooth edges of screen fonts (Сглаживание экранных шрифтов)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#15
Отправлено 23 января 2012 - 12:01
Например, контрол со списком контактов, похоже, является разновидностью стандартного .NET грида DataGridView. После добавления класса этого контролв - GUI.Controls.DataGridViewEx - в проектные настройки Object Mapping > Microsoft Controls > DataGridView, у контрола появляются стандартные свойства и методы для работы с гридами и получения значений из грида - wRowCount, wValue(row, column) и т.п. См. скриншот.
Прикрепленные файлы
#16
Отправлено 23 января 2012 - 12:03
Я скачала и посмотрела ради интереса ваше приложение.
Та он уже починил :)
ЗЫ Вы, оказывается, девушка :) Ну, в том смысле, что не парень. Я как-то не задумывался, думал, что парень
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#17
Отправлено 23 января 2012 - 13:39
Почти во всех постах modbear всегда были слова, говорящие, что - это сударыня.
Я как-то сразу для себя перевел ее ник, как "модная медведица". Хотя, понимаю, что это не так.
#18
Отправлено 23 января 2012 - 13:51
Почти во всех постах modbear всегда были слова, говорящие, что - это сударыня.
Я пока учебник дописывал - совсем от форума отбился, отписался и не заглядывал. Потому что времени не хватало. Вот и пропустил как-то
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных