Идентификация объекта WebTable/WebGrid в QTP

У меня есть приведенный ниже код в html для WebTable (Web Grid).

<table width="90%">
  <div class="greybox" style="margin-top:2%;">
    <table class="datagrid" width ="100%">....<table>
  </div>
</table>

Я попытался предоставить точно такие же (все) свойства в моем описательном программировании, но веб-элемент (DIV) не идентифицируется QTP. Есть ли уникальный способ определить это?

Примечание. Веб-страница представляет собой одностраничное приложение.

Изменить:

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

Browsername = Browser("micClass:=Browser").GetROProperty("name")
Pagename = Browser("micClass:=Browser").Page("micClass:=Page").GetROProperty("name")

Set desc = Description.Create()
desc("micclass").Value = "Webelement"

Set ChildObject=Browser("name:="&BrowserName).Page("name:="&PageName).ChildObjects(desc)

Set Child_Table_Value = nothing

For i=0 to ChildObject.Count-1
  innerhtmlvalue = ChildObject(i).GetRoproperty("innerhtml")
  htmltag = ChildObject(i).GetRoproperty("micclass")

  if(Instr(innerhtmlvalue, "MARGIN-TOP: 2%")<>0) then 
    if(Instr(innerhtmlvalue, "UniqueText")=0) then
      if(Instr(htmltag, "WebElement")<>0) then
        Set Child_Table_Value  = ChildObject(i)
      End If
    End If
  End IF
Next

Set Table_Value = Child_Table_Value.WebTable("html tag:=Table")

person Enthusiastic Learner    schedule 25.01.2014    source источник
comment
Что вы пытались получить, WebTable? Какие именно идентификаторы вы пытались использовать? Есть ли на странице несколько таблиц с классом datagrid? А если нет, то почему фокус на родительском div?   -  person Xiaofu    schedule 26.01.2014
comment
Это одностраничное приложение, и доступно множество таблиц. Когда я попытался использовать Object spy, я обнаружил, что ни одна из таблиц не идентифицируется с использованием уникального идентификатора, а при запуске она идентифицируется по порядковому идентификатору, и, поскольку для разных данных некоторые таблицы отображаются, а некоторые нет, таблица не обязательно указывать на правильную таблицу, из которой я пытаюсь получить значения. Поэтому мне пришлось использовать вышеописанную работу, чтобы определить правильную таблицу. пока работает нормально   -  person Enthusiastic Learner    schedule 27.01.2014
comment
Хорошо, что вы нашли обходной путь, но если вы предоставите более четкое представление о HTML, то кто-то здесь сможет предоставить вам более короткое/менее запутанное решение. Возможно, вы сможете сделать это в одном выражении XPath. Можете ли вы предоставить фрагмент HTML-кода, который включает часть таблицы и этот уникальный текст, на который вы ссылаетесь?   -  person Xiaofu    schedule 27.01.2014
comment
Да, это именно то, что было в моем начальном посте, если вы говорите только о свойствах. Я хотел бы прочитать данные внутренней таблицы, но в таблице нет ничего уникального. ‹ширина таблицы=90%› ‹класс div=greybox style=margin-top:2%;› ‹класс таблицы=ширина сетки данных =100%›....‹/Table› ‹div› ‹/table›. Строки .... представляют данные, которые являются содержимым таблицы. Одним из материалов является Уникальный текст. Мне не разрешено делиться содержимым таблицы, так как это конфиденциальные данные клиента   -  person Enthusiastic Learner    schedule 27.01.2014
comment
Просто предоставьте образец HTML с заменой PII на случайные слова, такие как Lorem Ipsum!?   -  person dmcgill50    schedule 21.09.2016


Ответы (2)


Итак, предположим, что у вас есть структура HTML примерно так:

<table width="90%">
  <tr>
    <td>
      <div class="greybox" style="margin-top:2%;">
        <table class="datagrid" width="100%">
          <tr>
            <td>UniqueText</td>
          </tr>
        </table>
      </div>
    </td>
  </tr>
</table>

... и в соответствии с вашим текущим решением вы можете полагаться на присутствие «UniqueText», тогда вы можете попробовать следующий оператор XPath:

(//table[contains(., 'UniqueText')])[last()]

Итак, в QTP/UFT вы будете делать:

Browser("micClass:=Browser").Page("micClass:=Page").WebTable("xpath:=(//table[contains(., 'UniqueText')])[last()]")
person Xiaofu    schedule 27.01.2014
comment
Спасибо Сяофу. Я попробую это и дам вам знать, как это работает. Однако о чем функция last()? - person Enthusiastic Learner; 27.01.2014
comment
Даже если вы используете «UniqueText», чтобы сузить его, оператор XPath будет соответствовать 2 таблицам, потому что обе таблицы содержат этот текст. last() гарантирует, что вы получите самую внутреннюю таблицу соответствия. - person Xiaofu; 27.01.2014
comment
Спасибо, Сяофу, и извините за задержку. Я какое-то время не использовал автоматизацию, так как здесь проходило ручное тестирование. Это прекрасно работает. - person Enthusiastic Learner; 01.02.2014
comment
Если это работает нормально, примите ответ, чтобы вопрос больше не появлялся в очереди без ответа. - person TheBlastOne; 10.02.2014

Попробуйте использовать, как показано ниже. (Попробуйте определить блок div с помощью «класса»)

Browser("micClass:=Browser").Page("micClass:=Page").Webelement("class:=greybox").Webtable("class:=datagrid")

Пожалуйста, дай мне знать

person TechDog    schedule 27.01.2014
comment
Привет Tech Dog. Спасибо за ваш вклад, но это не сработало - person Enthusiastic Learner; 01.02.2014
comment
Попробуйте использовать xpath (если вы не знаете, как получить xpath, используйте надстройку xpathchecker (mozila), чтобы получить xpath). - person TechDog; 03.02.2014