Грид. Клик на конкретной строке.
#1
Отправлено 27 декабря 2004 - 08:56
Надо записать процесс открытия редактора на конкретной строке в гриде.
В обычном виде все просто - кликом мыши выбираем строчку в гриде, потом кликаем на меню.
Когда записываю скрипт средствами Робота, получаю
Window SetContext, "Caption=Пользователи", ""
PSGrid Click, "ObjectIndex=1", "Coords=72,87"
Toolbar Click, "Text=tb_Main;\;ItemID=2", "Coords=8,7"
Меня не устраивала вторая строка, потому что фактически записался координатный клик, а мне необходимо выбирать конкретные данные.
Смотрю в хелп.
Переписываю вот так
PSGrid Click, "ObjectIndex=1", "Col=1;Value=Tester;Col=2;Value=Test"
Не работает. :(
Беру пример из хелпа, переписываю вот так
PSGrid Сlick, "ObjectIndex=1", "ColTitle=Пользователи;Value=Tester;ColTitle=Логин;Value=Test"
Опять не работает. :(
И так тоже.
PSGrid Click, "ObjectIndex=1", "Text=Tester|Test"
Я уже всю голову сломала - как мне обратиться к строке...
#2
Отправлено 27 декабря 2004 - 09:05
#3
Отправлено 27 декабря 2004 - 09:51
А просто по записи (как вы пробовали) редко получается - не может робот понять запись в гриде((
#4
Отправлено 27 декабря 2004 - 10:08
Грид может у меня действительно не PSGrid.
Я тестирую систему, написанную на Дельфи. Причем многие контролы, хоть и имеют корни в стандартных дельфевых, являются переделанными.
И, соответственно, хоть какой-то ближайших вид грида - TDBGrid, в Роботе ассоциирован с Generic объектом, который завязан только на координатах (если я правильно понимаю).
Я, честно говоря, совсем расстроена, потому что не могу правильно обратиться ни к одному нужному мне контролу.
Т.е. клик координатный отрабатывается, а получить какие-либо свойства не реально - даже у комболистбокса, потому что он тоже переделанный.
#5
Отправлено 27 декабря 2004 - 10:43
Вот уж чего действительно делать не стоит -так это расстраиваться)) Наоборот - это даже интеренсо - выкрутится как-нить - придумать обходной путь - было бы скучно, если бы все получалось с первого раза.Я, честно говоря, совсем расстроена, потому что не могу правильно обратиться ни к одному нужному мне контролу.
Насчет комбобоксов -и у меня та же проблема - нахожу записи так же как и в гриде
#6
Отправлено 27 декабря 2004 - 10:44
Inspector что определяет у Вашего комбобокса?
#7
Отправлено 27 декабря 2004 - 10:57
даже интеренсо - выкрутится как-нить - придумать обходной путь - было бы скучно, если бы все получалось с первого раза.
На меня давят ожидания...
Т.е. ждут, что я сейчас быстренько накликаю скрипты, которые потом рраз - и можно будет запускать едва ли не отдельно от меня.
И еще - объясните мне, что имеется в виду под "копированием в буфер"?
Обычное классическое Ctrl+C?
Дело в том, что в моем проекте на всех гридах запрещена отработка этого сочетания клавиш.
Т.е. считывать значения придется по-другому. :(
А object mapping не помогает работать с комбобоксами и т.п.?
У меня не совсем комбобокс, скорее ComboEditbox.
Он предлагает мне роботовский ComboEditbox.
Но потом, в процессе , когда я пытаюсь отработать
Result=SQAGetProperty("Type=ComboEditBox;ObjectIndex=1", "Text", TextEBop) все заканчивается с результатом Fail.
#8
Отправлено 27 декабря 2004 - 11:06
Попробуйте поработать с Вашим ComboEditbox как с EditBox при вводе данных и как с ComboBox при выборе из списка - вдруг получится. А также попробуйте работать с Вашим элементом как с ComboListBox.
#9
Отправлено 27 декабря 2004 - 11:08
#10
Отправлено 28 декабря 2004 - 08:27
На гриде считывание в буфер не работает, но нашелся путь в большой обход.
Только чтобы этот путь совершить, нужно количество строк в гриде.
Помогите плиз, как определить это количество?
#11
Отправлено 28 декабря 2004 - 08:55
Ещё мне кажется можно как-то с while поработать... типа пока активна кнопка Вниз - т.е. пока есть записи- то делать то-то.. но я в свое время не смогла найти нжную функцию - может у вас получится
#12
Отправлено 28 декабря 2004 - 09:00
А как Вы поступали в ситуациях, когда число строк в таблице на базе не соответствовало числу строк в гриде? (например выполнялась сортировка выборки на гриде или что-то подобное)Количество это, я так понимаю, нужно для постороения цикла. Я в таком случае коннектилась к базе, в котрой находиться таблица (записи грида) - и делала селект count(*) - т.е. подсчитывала количество записей в таблице.
По моему самое простое - попросить программистов добавить возможность считывания в буфер из грида, без этого у Вашего приложения плохая testability.
#13
Отправлено 28 декабря 2004 - 09:15
#14
Отправлено 28 декабря 2004 - 09:28
В программе есть служебная функция вызова окна с содержимым строки (все поля и данные в них) посредством сочетания клавиш и кликов мыши.
Так вот я построила последовательность - выбрали строку, нажали сочетание, вышло окно, считали значение, сравнили с эталоном.
Поскольку окно со значением вызывается только через мышь, то от Down и InputKeys пришлось отказаться. Гриды по высоте неизменны (пока вроде) и координатный сдвиг вниз на 20ед. дает как раз следующую строку. Оставалось только зациклить на нужное количество строк (не вышло) или на условие "пока кликаем в гриде".
Появилась новая проблема -даже когда грид (визуально-логически) закончился, то все равно эмуляция нажатия выбирала последнюю строку грида.
Пришлось кусать левое ухо - считываемое значение сохраняется и сравнивается с последующим. Если они совпадают, значит мы опять на последней строке и надо делать принудительный выход из цикла по Exit Do.
Я, конечно, понимаю, что это весьма неуклюжая конструкция. но пока не вижу других вариантов.
#15
Отправлено 28 декабря 2004 - 09:46
а скролл есть у этого списка?
#16
Отправлено 28 декабря 2004 - 09:55
Определение количества строк - это уже следствие, причина в том, что более простого способа нет. И я думаю, что это только средствами робота не реализовать.так при ччем тут считываение в буфер - вопрос в другом - как определить количество строк..... можно и без таблицы - считывать каждое значение - и "Down" - и так далее - но как написать цикл? от чего до чего?
Роботу все равно, что произойдет после нажатия кнопки. Т.е. к примеру у вас есть editbox, который нельзя редактировать (свойство readonly = true). Вы устанавливаете на него курсор и нажимаете кнопки. Сможете Вы таким способом узнать вводятся данные или нет? Считаем, что свойства элемента недоступны.
А если у Вас разрешение экрана поменяется, то что получится? Скрипт по возможности должен быть универсальным, а в данном варианте дастаточно жесткое ограничение получается.координатный сдвиг вниз на 20ед. дает как раз следующую строку
Даже если он и есть, то скорее всего встроен в грид, т.е. свойства скрола узнать не получится. Хотя может быть в данном случае по другому сделано.а скролл есть у этого списка?
#17
Отправлено 28 декабря 2004 - 10:15
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?
#18
Отправлено 28 декабря 2004 - 10:37
Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.2 Petr
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?
Для работы с буфером есть такая вещь - Clipboard (см. SQABasic help).
#19
Отправлено 28 декабря 2004 - 11:17
А если у Вас разрешение экрана поменяется, то что получится? Скрипт по возможности должен быть универсальным, а в данном варианте дастаточно жесткое ограничение получается.
Тогда буду думать. Я же понимаю, что это не самый лучший вариант.
Но ближайшие полгода это не грозит - потому что на своем компе менять разрешение я не собираюсь, а больше никого нет.
Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.
Так - это касается одной строки - а как перейти дальше?
И как понять - где грид заканчивается?
а скролл есть у этого списка?
Отдельный? Наверно нет. А как узнать - есть он или нет?
#20
Отправлено 28 декабря 2004 - 11:26
про клипборд знаем - основы как никак...Без проблем, если копирование в буфер работает - то после ввода данных в editbox и занесения значения в буфер в случае, если editbox редактируемый в буфере будет значение, если же он не редактируемый - в буфере будет пусто.2 Petr
Допустим, что копирование в буфер работает. Ок-и что дальше вы предлагаете делать?
Для работы с буфером есть такая вещь - Clipboard (см. SQABasic help).
такая ситуация: есть грид, в нем n строк, работает копирование в буфер. Как вы проверите есть ли в гриде строка "строка". Все записи заполнены, но среди них где-то есть нужная запись. Записей может быть несколько. Т.е. зациклить while нельзя
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных