<ob...> is null or not an object!?
#1
Отправлено 04 декабря 2007 - 07:50
#2
Отправлено 04 декабря 2007 - 07:57
А потом корректно задайте свой вопрос, если хотите чтобы на него вам ответили.
#3
Отправлено 04 декабря 2007 - 08:21
#4
Отправлено 04 декабря 2007 - 08:54
Объект не находится. Надо убедиться, что указано правильное имя и в момент выполнения он существует.
Дмитрий
#5
Отправлено 04 декабря 2007 - 09:48
Привет! Как уже тут написали о чем вопрос не очень понятно.Не всегда распознаются объекты (т.е. распознаются через раз, и один и тот же тест работает через раз), и выводится ошибка: <ob...> is null or not an object. Может, кто подскажет, в чём дело.
Я встречал такую ошибку при написании скриптов на JavaScript. С автоматическим тестированием это не было никак связано. Такое же поведение встречалось - то работает, то нет.
Причина может быть, в асинхронной загрузке какого-либо ресурса на web странице. Например на странице есть frame или iframe куда загружается какой-то документ. А скрипт, не дожидаясь события, что документ загружен пытается работать с этим документом или его объектами. Тут как раз и получается - как повезет - успел подгрузится - работает. Не успел - ошибка.
Alexey
#6
Отправлено 04 декабря 2007 - 11:22
Я использую JScript, приложение написано на Java.
Эта проблема у меня возникает(как я только-то понял), только в том случае, когда я пытаюсь обратиться к объекту PopupMenu в приложении(что-то с ним не так=(((( ). Пытаюсь обойти как-то, пока безуспешно(((
#7
Отправлено 04 декабря 2007 - 12:37
Если бы вы прислали кусок скрипта, то можно было бы пораскинуть мозгами. Проблема скорее всего не с самим ПопАпом, а с вашим скриптом.Спасибо!
Я использую JScript, приложение написано на Java.
Эта проблема у меня возникает(как я только-то понял), только в том случае, когда я пытаюсь обратиться к объекту PopupMenu в приложении(что-то с ним не так=(((( ). Пытаюсь обойти как-то, пока безуспешно(((
Alexey
#8
Отправлено 04 декабря 2007 - 13:00
function Go_to_staffrole()
{
Sys.Process("asd").Window("com.gui.main.n", "ASD").JRootPane.null_layeredPane.JPanel.j_2.k.l.i.V.JPanel.JPanel.E.Click(95, 12);
Sys.Process("asd").Window("com.gui.main.n", "ASD").JRootPane.null_layeredPane.JPanel_2.JPopupMenu.JMenuItem_4.Click(65, 13);
}
#9
Отправлено 04 декабря 2007 - 16:22
Я, к сожалению, не имею опыта работы с данным инструментом автоматизации тестирования.Через это меню даже два клика не проходит:
function Go_to_staffrole()
{
Sys.Process("asd").Window("com.gui.main.n", "ASD").JRootPane.null_layeredPane.JPanel.j_2.k.l.i.V.JPanel.JPanel.E.Click(95, 12);
Sys.Process("asd").Window("com.gui.main.n", "ASD").JRootPane.null_layeredPane.JPanel_2.JPopupMenu.JMenuItem_4.Click(65, 13);
}
Но у меня есть подозрение, что надо немного подождать после вызова ПопАп меню. Оно просто физически может не успеть инициализироваться\отрисоваться.
Джава нетороплива.
Alexey
#10
Отправлено 05 декабря 2007 - 09:50
Просто скрипт выполняется быстрее чем открывается форма, вот по этому он ее ни находит попробуй это:
BuiltIn["Delay"](1000); // 1000 -время в милисекундах
А потом свой код, если не подействует поставь больше задержку :)
#11
Отправлено 05 декабря 2007 - 12:07
А во время выполнения скрипта само popup меню показывается на экране?
Дмитрий
#12
Отправлено 05 декабря 2007 - 12:44
Пока же вы просто вызываете метод для несуществующего объекта и получаете соответствующую ошибку - если я правильно понял, вы записали скрипт и теперь пытаетесь его стуктуризовать, но проблема в том, что такие действия как - подвод мышки под popup в обычном режиме не записываются(в винраннере для этого, например, был свой режим, который отслеживал перемещения мыши по экрану.)
#13
Отправлено 05 декабря 2007 - 13:57
To tom_13: обычно я использую Sys.Delay(1000);
To Dmitry N: Меню само показывается, нажимается... и всё, больше никакой объект на обновленном окне не распознаётся (в ходе выполнения теста). Хотя в Display Object Properies никогда никаких проблем не бывает.
#14
Отправлено 05 декабря 2007 - 14:09
Задержка, к сожалению, не помогает (я это в первую очередь пробовал).
To tom_13: обычно я использую Sys.Delay(1000);
To Dmitry N: Меню само показывается, нажимается... и всё, больше никакой объект на обновленном окне не распознаётся (в ходе выполнения теста). Хотя в Display Object Properies никогда никаких проблем не бывает.
Опишите более подробно поведение вашей системы: какие действия быбираются из меню, что должно произойти, приведите код, предшествуюший ошибки и провоцирующий ёё - это поможет быстрее понять проблему.
#15
Отправлено 05 декабря 2007 - 15:13
function Main()
{
try
{
TestedApps.RunAll();
var p1;
var w1;
var w2;
var w3;
var w4;
var w5;
var w6;
p1 = Sys.Process("asd");
w1 = Sys.Process("asd").Window("com.gui.main.n", "ASD");
w2 = w1.JRootPane.null_layeredPane;
w3 = w2.JPanel;
w4 = w3.j_2;
w5 = w4.a.l.f.JPanel;
w6 = w5.JPanel_2;
w6.JPanel.JTextField.Keys("a[Tab]");
w6.JPanel_2.JPasswordField.Keys("a[Tab]");
w5.JPanel_3.E.Click(30, 9);
w5 = w4.k.l.i.V;
w5.JPanel.JPanel.E.Click(115, 6);
w2.JPanel_2.JPopupMenu.JMenuItem.Click(67, 12); // последняя операция, которая проходит
Sys.Dalay(2000); //Задержка в этом месте также не помогла
w2 = w5.b.JPanel_3.JPanel_2; //ошибка: 'b.JPanel_3' is null or not an object
w4 = w2.JTextField;
w4.Drag(143, 8, -198, 0);
w4.Keys("sdfg");
w2.E_2.Click(32, 16);
p1.Window("SunAwtDialog", "Information").JRootPane.null_layeredPane.null_contentPane.JOptionPane.OptionPane_buttonArea.OptionPane_button.Click(16, 15);
w3.b.w.Click(37, 13);
w1.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}
#16
Отправлено 05 декабря 2007 - 15:29
w2.JPanel_2.JPopupMenu.JMenuItem.Click(67, 12); - я почти уверен, что здесь можно работать нетолько через координаты.
Вместо Sys.Delay я бы советовал использовать методы из группы Wait, например WaitAWTObject.
Что же до того, что у вас далее ругается, я бы для дебага, разбил на части ваше выражение w5.b.JPanel_3.JPanel_2 и удостоверился в том, что видно, а что нет(особенно, обратите внимание на b- есть ли такой объект в самом деле), и как все эти объекты выглядят в Object Browser. Бывает такое, что в опциях стоит условие при записи, если есть возможность, использовать короткие имена, тогда могут возникать ошибки при воспроизведении, поэтому есть смысл убедится в том, что объект именуется именно так, как вы к нему обращаетесь, причем имена должны совпадать 1 к 1.
И маленький совет: старайтесь как можно реже использовать запись.
#17
Отправлено 06 декабря 2007 - 05:59
Ну, во-первых, не Sys.Dalay, а BuiltIn.Delay. Если вы используете плагин 'TestComplete 3 Compatibility', то настоятельно рекомендую от него избавиться (File | Install Extensions...) -- жить станет легче, хоть и придётся перезаписать существующие тесты.Sys.Dalay(2000); //Задержка в этом месте также не помогла
Во-вторых, попробуйте ещё такую строку вставить сюда:
w5.Refresh();
Дмитрий
#18
Отправлено 06 декабря 2007 - 09:25
Но проблема еще осталась.
Что касается Object Browser, то все объекты соответствуют записи.
#19
Отправлено 06 декабря 2007 - 09:29
Если Refresh вам помог - это хорошо.
А вы попробовали вместо просто delay методы Wait(WaitWindow,WaitProperty,....)? Обычно они помогают решить вопросы с синхронизацией приложения.
#20
Отправлено 06 декабря 2007 - 09:46
всё работает!!!!!!!
Всем СПАСИБО!;)))
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных