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

Deus

Регистрация: 10 окт 2006
Offline Активность: 30 сен 2010 12:27
-----

Мои темы

ADO.Connection to MSSQL

10 мая 2007 - 15:14

:hi:

TestComplete 5.11

Сделал аналогично как в хелпе:
Set connection = ADO.CreateADOConnection 
  connection.ConnectionString = "Provider=MSDASQL.1;Data Source=(local);Initial Catalog=someProject;Persist Security Info=True;User ID=id;Password=password;"
  connection.Open()
с тем отличием, что не создавал DSN link.

Error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Кто-то сталкивался? Почему в хелпе такой странный провайдер, как конфигурировать коннекшн стринг?

Цена/Качество

13 марта 2007 - 14:21

Как для функционального так и для нагрузочного тестирования. Ваши доводы?

P.S. также интересует цена на loadrunner.

работа с Frames

17 ноября 2006 - 10:44

Приветствую! :rtfm:

Подскажите пожалуйста, как дожидаться загрузки фреймов.
Иерархия следующая:

Set p = runProcess("c:\\Program Files\\Internet Explorer\\iexplore.exe")

Set w = p.Window("IEFrame","*",1)
Set w1 = w.Window("Shell DocObject View","",1).Window("Internet Explorer_Server","",1)

Set contentPage = myPage.document.frames.frame("contentFrame")  
  Set menuPage = contentPage.document.frames.frame("menuFrame").document.all  
  Set topPage = contentPage.document.frames.frame("topFrame").document.all
  Set bodyPage = contentPage.document.frames.frame("bodyFrame")'.document.all
После определнных действий вся страница обновляется. По идее, метод w1.Wait должен дождаться загрузки всеx фреймов. Или нет?
Основная нагрузка приходится на bodyFrame и он не успевает обновиться, как скрипт дальше лезет и не находит объект.
Пробовал писать и contentPage.Wait и bodyPage.Wait и комбинации, но все это не то..
К тому же, как быть, если какие-то дорасчеты происходят на стороне клиента?
Просто подбирать методом тыка задержку не хочется.

Работа с Item

09 ноября 2006 - 16:27

Доброго времени суток! :blush:
Задача. Есть немаленький портал с львиной долей бизнес логики и громадными запросами к базе данных. На странице порядка 3000-4000 всяких Item'ов.
После написания такого кода:
myValue = myPage.Item("myItem").firstChild.nodeValue
Результат получался "через раз".
По совету уважаемого Dmitry_N было переписано тоже самое, но с WaitItem и таймаутом в 10сек.
Не помогло.
Тогда, закралось подозрение, что ТС просто не успевает обновить все Item'ы (3-4 тысячи - немаленькое количество). Код получился примерно следующий:
timeOut = 10000 ' 10sec
  endTime = Win32API.GetTickCount + timeOut
'------------------------------------------------------------------------------------------
  Do While endTime + timeOut > Win32API.GetTickCount
  myPage.Refresh
    myValue = myPage.WaitItem("myItem", timeOut).firstChild.nodeValue 
    if (myValue <> Empty) then Exit Do
  Loop
Аналогичный код на 2000 Item'ов работал всегда. Увеличил таймаут до 20сек- все выполняется. Но в целом скрипт, который сравнивает значения в 2х полях выполняется 2 минуты. Возможно как-то более правильно и быстрее выполнять эти же действия?

И снова о запуске

03 ноября 2006 - 16:11

Перечитал многие топики на форуме, но мне остается до сих пор неясным момент - как запустить IE так, чтобы работать именно с этим экземпляром.

Вспоминая WIN32API, после создания окна CreateWindow мы получаем его описатель hwnd, который уникально идентефицирует это окно. Но здесь, насколько я понял, нигде не используются эти описатели, а используются идентефикаторы, которые назначаются как 1,2,3..по порядку.

Соответственно запуск осуществляю вот так:
Call Win32API.WinExec("c:\\Program Files\\Internet Explorer\\iexplore.exe", SW_SHOW)

И не понимаю как найти именно это окно, ведь хэндлов нет, есть токо название процесса iexplore и его порядковый номер, который использовать не имеет смысла, ведь не определять же перед каждым запуском сколько эксплореров запущено. Читал, что как вариант, закрывать их всех - имхо не совсем правильно.

Нашел, что при создании вместо Process & Window лучше использовать WaitProcess & WaitWindow. Отсюда усвоил четкую иерархию:
Sys.Process("iexplore", 2) - запускаем процесс
.Window("IEFrame", "about:blank - Microsoft Internet Explorer", 1) - окно фрейма
.Window("Shell DocObject View", "", 1) - непонятно (впрочем и неважно)
.Window("Internet Explorer_Server", "", 1) - собсно ие-сервер
.Page("about:blank") - наша страница
И собственно вопрос, для всех дочерних окон использовать WaitWindow и как правильно дожидаться загрузки страницы?
Пытался cделать вот так:

Sub Test1
Dim p1
Dim w1
Call Win32API.WinExec("c:\\Program Files\\Internet Explorer\\iexplore.exe", SW_SHOW)
Set p1 = Sys.WaitProcess("iexplore",2000)
Set w1 = p1.WaitWindow("IEFrame","*", 1000)
Do While not w1.Exists
  Set w1 = p1.WaitWindow("IEFrame", "about:blank - Microsoft Internet Explorer", 1)
Loop
End Sub
Особенно хотелось бы услышать(увидеть всмысле) ответ гуру Dmitry_N :-)