Quicktest Pro - найти первую кнопку после сопоставления текста - PullRequest
2 голосов
/ 04 июня 2009

Я хочу использовать динамическое распознавание объектов (описательное программирование), чтобы найти первую кнопку с меткой «Удалить», которая появляется после некоторого заданного текста (например, первая кнопка «Удалить», которая появляется после текста «Элемент XYZ-123»). У меня есть хитрый способ сделать это, если и текст, и кнопка находятся внутри одной строки веб-таблицы, но я надеялся на более элегантное или надежное решение (надеюсь, не основанное на таблицах).

Я бы предпочел избегать использования свойства .Object, поскольку в документации утверждается, что свойство .Object возвращает объекты DOM только при тестировании в IE, а не в Firefox.

Спасибо!

Ответы [ 3 ]

1 голос
/ 07 июня 2009

Вот решение, использующее атрибут sourceIndex, обратите внимание, что sourceIndex - это свойство только для IE, но QTP имитирует его в Firefox, поэтому один и тот же скрипт будет работать в обоих браузерах. Вы можете выбрать использование координатных свойств, таких как abs_x и abs_y, если source_index не соответствует требованиям.

Код, который следует за ответом на заданный вопрос, превращая его в общую функцию, оставлен читателю в качестве упражнения; o)

''#1. Create description for locator text 
Set textD = Description.Create()
textD("micclass").Value = "WebElement"
textD("innertext").Value = ".*Item XYZ-123.*"

''#2. Find locator sourceIndex
set texts = Browser("B").Page("P").ChildObjects(textD)
Set text = texts(texts.Count-1) ' Take last text '
textIdx = text.GetROProperty("source_index") ' works for FF too '

''#3. Create description for button 
Set buttonD = Description.Create()
buttonD("micclass").Value = "WebButton"
buttonD("value").Value = "Delete"
Set btns = Browser("B").Page("P").ChildObjects(buttonD)

''#4. Find first button after locator text 
For i = 0 To btns.Count
    If btns(i).GetROProperty("source_index") > textIdx Then
        btns(i).Click ' Or whatever you want to do with it '
        Exit For
    End If
Next

Что следует отметить по этому решению:

  • Это не предполагает ничего об элементе, содержащем текст, если вы знаете, что это весь текст в элементе, вы можете удалить .* s и / или добавить «html tag» для гораздо лучшей производительности.
    • Вот почему мы берем последний элемент, который соответствует описанию, первый элемент будет BODY и т. Д.
  • В описании текста мы должны указать "micclass" = "WebElement", потому что по умолчанию ChildObject отфильтровывает WebElement s, предполагая, что они неинтересны.
1 голос
/ 04 июня 2009

Предполагая, что не существует более простого способа сделать это, вы можете попробовать проанализировать HTML. Найдите текст поиска в HTML и начните поиск HTML с этой точки для кнопки «Удалить». Вы должны быть в состоянии извлечь идентификатор или другое идентифицирующее свойство из HTML, которое вы можете использовать для описательного программирования.

У вас есть примеры HTML и QTP-кода, которые мы могли бы посмотреть, чтобы увидеть больше деталей? Возможно, есть более простой способ.

0 голосов
/ 13 июля 2009

Позвольте мне сначала перефразировать вопрос.

Как получить ссылку на объект, содержащийся в WebTable, если номер строки неизвестен, но у вас есть уникальное значение ключа для поиска строки?

Это относится к кнопкам, флажкам, выпадающим спискам и любым другим объектам в таблице.

Осуществление.

1) Найти строку

intRow = objWebTable.GetRowWithCellText (sKeyValueText, "Item") Вы можете указать столбец по имени или номеру

2) Получить дочерний объект

Установить objButton = objWebTable.ChildItem (intRow, intCol, "WebButton", 0) Вы можете указать столбец только по номеру. Последний параметр вступает в силу, если в одной ячейке несколько кнопок.

Посмотрите другие технические примеры в моем блоге (http://automationbeyond.wordpress.com/).

...