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

Фотография

QTP9:Доступ к JavaScript переменным


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 shumnic

shumnic

    Новый участник

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Виктор Соловьев

Отправлено 14 мая 2007 - 07:44

Проблема в следующем:

Необходимо получить доступ(узнать значение) к JavaScript переменным находящимся на странице.

Пробовал так:
Browser("MSIE6").Page("Page").Frame("frame").Object.variableName, где variableName - имя переменной значение которой надо получить(глобальная JavaScript переменная на странице).
Ничего не получилось.

Подскажите как быть.
  • 0

#2 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 14 мая 2007 - 12:54

Помоему это просто невозможно.

Если только не написать вспомогательные функции на ява скрипте и их вызывать.

ИМХО.
  • 0
Мой блог - Этот сайт закрыт.

#3 shumnic

shumnic

    Новый участник

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Виктор Соловьев

Отправлено 15 мая 2007 - 05:53

А можно показать пример вспомогательных функций?

Вообще задача в следующем:
На форме 140 объектов. У ник у всех меняются свойства. Задача состоит в проверке изменения этих свойств.
Распознавать каждый объект по отдельности не хочется(трудозатратно).
Идея была в следующем:
получить доступ к хеш-таблице объектов формы и в цикле все свойства проверить.

Может быть кто-то предложит другое решение?
  • 0

#4 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 15 мая 2007 - 14:53

А можете дать конкретный пример объекта? И к каким конкретно свойствам вы пытаетесь обратиться?
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#5 shumnic

shumnic

    Новый участник

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Виктор Соловьев

Отправлено 16 мая 2007 - 05:40

Хотелось обратиться к Browser("MSIE6").Page("Page").Frame("frame").Object.variableName, где variableName - хещ-таблица объектов содержащихся на странице.
Потом при помощи этой хеш-таблицы для каждого объекта узнать свойства(например visible, disabled)
  • 0

#6 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 16 мая 2007 - 07:25

shumnic, постановка задачи не детализирована. Необходимо более конкретно описать, что необходимо сделать (вплоть до размещения ссылки на страницу).

Скажу сразу, что работать со свойствами объекта через метод .Object -> по времени в 2 раза дольше. Если работа идет со стандартными свойствами, лучше использовать .GetROProperty, если нет, то тогда уже .Object.

По поводу вспомогательных функций. Например, разрабатывается javascript библиотека, которая подгружается на странице. Она создает определенный фрейм, куда и скидывает необходимые переменные. А потом уже с помощью меркури можно обратится в него, и выяснить все значения, которые интересуют. Но это уже изврат.
  • 0
Мой блог - Этот сайт закрыт.

#7 shumnic

shumnic

    Новый участник

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Виктор Соловьев

Отправлено 16 мая 2007 - 13:12

Более детализировано:

Есть страница, на ней 140 различных элементов(WebList, WebEdit, WebCheckbox). Надо узнать у каждого свойства disabled и visible.
  • 0

#8 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 17 мая 2007 - 14:58

Организовываешь по ним цикл, перебираешь каждый элемент, и спрашиваешь у него значение свойства .Object.currentStyle.visible, .Object.currentStyle.displayed

Писал без проверки, но помоему так.
  • 0
Мой блог - Этот сайт закрыт.

#9 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 17 мая 2007 - 15:27

Согласен с Luceus.

Только пара моментов:

1. Чтобы получить дочерние элменты INPUT таблицы (советую брать по отдельности WebEdit, WebList, etc.), воспользуйтесь методом ChildObjects объекта WebTable. А потом уже в цикле получайте свойства

2. Удобнее всего результаты этой функции хранить в виде Dictionary где ключ - имя контрола (например, name или html id), a значения - ещё один Dictionary (ключ - имя свойства, value - значение свойства).
  • 0
Best regards,
Майк.

#10 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 18 мая 2007 - 06:53

К дополнению 2 пункта от Mike. Я написал удобную функцию, что бы по сто раз не объявлять описание тех или иных объектов. При необходимости, она вызывается следующим образом: .ChildObjects (xc_description_get ("micclass: WebList, name: List1"))

Function xc_description_get (ByVal object_description)
	Set el_description = Description.Create()

	object_description = Split(object_description, ", ")

	For i = 0 to UBound(object_description)
  object_description_item = Split(object_description(i), ": ")

  el_description(object_description_item(0)).Value = object_description_item(1)
	Next

	Set xc_description_get = el_description
End Function

  • 0
Мой блог - Этот сайт закрыт.

#11 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 23 мая 2007 - 05:39

Если на странице, есть слой с несколькими ссылками. У слоя свойство видимости установлено на невидимый. То при запросе у линки, видима ли она, вернет, что да. Проблема так и не решилась.
  • 0
Мой блог - Этот сайт закрыт.

#12 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 24 мая 2007 - 11:30

Приведите пример HTML-кода и CSS. А также код на VBScript под QTP, который у вас не работает. Чем конкретней, тем лучше. Т.к. теоретически никаких проблем быть не должно.

PS. Вы пробовали обращаться к свойствам через Object.currentStyle, как предлагал Luceus?
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#13 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 10 сентября 2007 - 17:07

Скажу сразу, что работать со свойствами объекта через метод .Object -> по времени в 2 раза дольше. Если работа идет со стандартными свойствами, лучше использовать .GetROProperty, если нет, то тогда уже .Object.

Хм. Не понял, почему работать с объектами через Object по времени в 2 раза дольше
  • 0

#14 Luceus

Luceus

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Украина

Отправлено 11 сентября 2007 - 06:58

ch_ip, я производил временные замеры по эквивалентным действиям.

Например:

var1 = oSomeTable.GetCellData (4, 5)
var2 = oSomeTable.Object.Rows (3).Cells (4).innerText

Потом сделал замеры таймером, сколько скрипт выполняет первую строчку, и вторую. Пришел к тому выводу, что описал выше.

Переписав функции в скрипте, я ускорил его работу в 2 раза.
  • 0
Мой блог - Этот сайт закрыт.

#15 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 11 сентября 2007 - 09:30

При единичном использовании .object, работать может не быстрее (насчёт медленнее, я всё-же сомневаюсь). Но если объект .object использовать хотя-бы 2-3 раза (например для получения различных свойств объекта) это даёт значительный выигрыш по времени. Но для этого надо сначала присвоить объект переменной, а потом его использовать.
  • 0
Best regards,
Майк.


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных