День добрый всем. Столкнулся с неприятной ошибкой и никак не могу ее победить.
Были рабочие скрипты и функции на ТС 7.50 (вин ХП. ИЕ8), решились таки перейти на 8ку (вин 7, ИЕ9). перенесли проект, часть скриптов работает, но вот одна функция напрочь отказывается работать. и падает с ошибкой при вызове:
"Вызываемая сторона (сервер [а не приложение-сервер]) недоступна и исчезла; ни одно подключение более не действует. Сам вызов не был выполнен"
Собственно сама функция:
function FindValue (page, container, TextToFind, length)
{
var StrhStart = aqString.Find(container, TextToFind);
var value = aqString.SubString(container, StrhStart, length);
return value;
}
При этом самое бесовское в том, что если открыть страницу и выполнить только эту функцию она нормально отрабатывает. А в рамках скрипта (перед ней стоит переход на страницу где она должна "вырезать" из юрл адреса требуемое значение) она валится.
Вызываемая сторона недоступна и исчезла
Автор Mrak, 04 мар 2012 13:41
Сообщений в теме: 3
#1
Отправлено 04 марта 2012 - 13:41
#2
Отправлено 12 марта 2012 - 08:50
Здравствуйте.
Подозрение, что вы передаёте "убитый" объект через параметр container. По всей видимости, значение имеет то как вы вызываете эту функцию и какие параметры в неё передаёте. Пришлите код, где функция вызывается и инициализируются параметры, передаваемые в неё.
Подозрение, что вы передаёте "убитый" объект через параметр container. По всей видимости, значение имеет то как вы вызываете эту функцию и какие параметры в неё передаёте. Пришлите код, где функция вызывается и инициализируются параметры, передаваемые в неё.
С уважением,
Дмитрий
Дмитрий
#3
Отправлено 12 марта 2012 - 10:35
Здравствуйте.
Подозрение, что вы передаёте "убитый" объект через параметр container. По всей видимости, значение имеет то как вы вызываете эту функцию и какие параметры в неё передаёте. Пришлите код, где функция вызывается и инициализируются параметры, передаваемые в неё.
В общем то первоисточник проблемы найден. Функция корректна, и работает нормально, причина почему она падает в том что функция не может получить значение URL страницы. А вот URL теряется в момент авторизации в системе. (точнее клика по кнопке "Ок") проблема решилась тем, что в функцию авторизации были добавлены строки где по новой объявляем переменную page и передаем ее обратно в скрипт.
Поэтому вопрос немного меняется. Что является причиной потери свойств URL адреса при автороризации? При условии, что в ТС7 свойство не теряется.
Собственно сама функция авторизации:
function LogIn(login, password){
var l=1; isPassed = 0;
while (l<=30){
Sys.Refresh()
var IEProc = Sys.FindAll("ProcessName", "IEXPLORE", 1);
IEProc = VBArray(IEProc).toArray();
for (i=0; i<IEProc.length; i++){
var LWindow = IEProc[i].Find("WndClass", "#32770", 1);
if (LWindow.Exists) {
LWindow.Window("SysCredential", "", 1).Window("ComboBoxEx32", "", 1).Window("ComboBox", "", 1).Window("Edit", "", 1).wText = login;
aqUtils.Delay(200)
LWindow.Window("SysCredential", "", 1).Window("Edit", "", 1).wText = password;
LWindow.Window("Button", "ОК", 1).ClickButton(); isPassed = 1; break;}} - соответственно значение URL теряется после этой строки.
if (isPassed == 1){break}
else {aqUtils.Delay(2000); l++}}
if (isPassed == 0){Log.Error("Окно авторизации не появилось за отведенное время"); stop;}
}
Измененная функция:
function LogIn(login, password){
var l=1; isPassed = 0;
while (l<=30){
Sys.Refresh()
var IEProc = Sys.FindAll("ProcessName", "IEXPLORE", 1);
IEProc = VBArray(IEProc).toArray();
for (i=0; i<IEProc.length; i++){
var LWindow = IEProc[i].Find("WndClass", "#32770", 1);
if (LWindow.Exists) {
LWindow.Window("DirectUIHWND", "", 1).Keys('[Down]')
aqUtils.Delay(1000)
LWindow.Window("DirectUIHWND", "", 1).Keys('[Down]')
aqUtils.Delay(1000)
LWindow.Window("DirectUIHWND", "", 1).Window("CtrlNotifySink", "", 8).Window("Edit", "", 1).wText = login;
aqUtils.Delay(200)
LWindow.Window("DirectUIHWND", "", 1).Window("CtrlNotifySink", "", 9).Window("Edit", "", 1).wText = password;
LWindow.Window("DirectUIHWND", "", 1).Window("CtrlNotifySink", "", 3).Window("Button", "ОК", 1).ClickButton(); isPassed = 1; break;}}
if (isPassed == 1){
aqUtils.Delay(1000)
var iexplore = Sys.Process("iexplore");
var page = iexplore.page("*");
return page
break}
else {aqUtils.Delay(2000); l++}}
if (isPassed == 0){Log.Error("Окно авторизации не появилось за отведенное время"); stop;}
}
#4
Отправлено 13 марта 2012 - 08:09
Я не очень понял, что такое "свойства URL адреса", но подозреваю что вы имеете в виду объект Page. Не могу сказать, почему от "теряется" в вашем случае - это может зависеть и от страницы и от версии браузера. Переполучать объект Page после открытия новой страницы или выполнения входа в приложение является хорошим подходом, позволяющим избежать неожиданных проблем, которые могут быть вызваны различными причинами. Если вы принципиально хотите разобраться с этим вопросом, то вам надо обратиться в службу поддержки.
С уважением,
Дмитрий
Дмитрий
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных