2016-06-06 6 views
1

Я пытаюсь написать сценарий в UFT, где мне нужно щелкнуть ссылку (всегда первая ссылка в таблице), чей заголовок изменяется динамически. Я стараюсь:Описательное программирование, чтобы щелкнуть ссылку в Интернете, название которой изменяется динамически

Dim obj_ChkDesc 

Set obj_ChkDesc=Description.Create 
obj_ChkDesc(“Class Name”).value = “Link” 
Obj_ChkDesc("name").value="Log in" 

Browser().page().link(obj_ChkDesc).click 

Это не сработает, так как при изменении значения он не работает. Может ли кто-нибудь сказать мне, что нужно сделать, чтобы щелкнуть по первой ссылке, название которой изменяется динамически?

Заранее спасибо.

+1

Лично, если объект, который я хочу контролировать, известен (т. Е. Всегда первая ссылка ... кажется довольно хорошо определена для меня), то я бы не использовал описательное программирование, чтобы ее найти. Я бы GuiSpy это, а затем найти что-то об этой ссылке, которая всегда может быть предсказана ... возможно, что-то во внутреннем контексте или что-то в URL. В этом случае индекс кажется надежным;) что бы это ни было, я создаю ИЛИ вокруг этого, поэтому я могу просто вызвать объект по имени и сказать .click ... Я использую только описательное программирование, когда не знаю, из каких объектов OR я ищу. –

ответ

4

Существует два способа сделать это.

Прежде всего, используйте Regular Expression. Но в нем есть предположение, что имя link должно соответствовать некоторым правилам, например динамическим 10 цифрам, тогда вы можете использовать [0-9]{10} в качестве шаблона регулярных выражений. Чтобы сделать это, вам нужно использовать Spy, чтобы захватить эту ссылку, а затем изменить его свойство, как outerhtml регулярного выражение ...

Другим способом (я рекомендую эту): так как вы упомянули, это WebTable. Существует метод, называемый ChildItem. Скажем, ссылка, которую вы хотите кликнуть, всегда будет Row 1, Col 1. Тогда вы можете написать что-то вроде этого:

'Set Table object 
Set TableObj = Browser(...).Page(...).WebTable(...) 
'Locate Link 
Set LinkObj = TableObj.ChildItem(1,1,"Link",0) 
LinkObj.Click 

Обратите внимание, что параметр здесь 1,1,"Link",0 означает Row,Col,ClassName,Index. Index может вызвать путаницу. Скажем Row 1 Col 1 имеет две ссылки, и вы хотите нажать вторую ссылку, затем Index должно быть 1.

+0

Спасибо, что работает. :-) – user3530656

1

Прежде всего, на основании Вашего заявления: where i need to click on a link(Always the first link in the table), вам не нужно использовать Obj_ChkDesc("name").value, потому что в общем name собственности будет отличаться для каждой ссылки. И, используя его, вы специально ищете эту ссылку.
Вы можете просто использовать:

Browser().page().ChildObjects(obj_ChkDesc)(0).Click 

Другое дело, вы должны также включать WebTable в своем заявлении выше, в противном случае вы будете в конечном итоге охватывающих все ссылки со страницы, а не только из конкретной таблицы.