Как я могу получить доступ к гиперссылке, используя ее название или подпись - PullRequest
1 голос
/ 09 ноября 2011

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

Do 
    Set msgList = Browser("Incoming — Gmail").Page("ВIncoming — Gmail").ChildObjects(msgDesc)
    msgCount = msgCount + msgList.Count()

    Reporter.ReportEvent micPass, "MessagesCount", "Messages: " & msgCount

    'MsgBox msgList.Count() ' in a purpose of debugging

Loop While SurfNextPage(Browser("Incoming — Gmail").Page("Deliver successfull"))

'Function surfs to the next page, if it possible
' currPage -- current page
'Return: TRUE, if  link to the next page is available, otherwise ELSE
Function SurfNextPage(currPage)
Dim bResult

   Set hlDesc = Description.Create
   hlDesc("name").Value = "next"

   Set hlList = currPage.ChildObjects(hlDesc)
   For i = 0 to (hlList.Count()-1)
       Set urlNextMail  = hlList(i)     'there would be the only element in list

   Next

   bResult   = urlNextMail.Exist

   If bResult Then
       urlNextMail.Click 'surfs to the next page

   End If

   SurfNextPage = bResult

End Function

Веб-страница имеет сложную структуру - много DIV и Java, поэтому я не могу точно сказать, к какому фрейму или таблице относится эта ссылка, но других ссылок с таким именем нет.

1 Ответ

1 голос
/ 09 ноября 2011

После некоторого переворота в комментариях появляется сообщение, что ссылка next существует на последней странице, но нажатие на нее ничего не дает.

Вам следует изменить описание, которое вы используете, чтобы идентифицировать ссылку, чтобы она соответствовала только ссылкам, которые перемещаются на следующую страницу, а не ссылке, которая невидима (но есть) на последней странице.


Исходный ответ: Поскольку вы всегда используете одну и ту же страницу для вызова SurfNextPage, этот метод должен работать (при условии, что в репозитории объектов есть ссылка "next" вуказанная страница).

Если вы хотите использовать разные страницы, вам следует использовать описательное программирование, то есть не использовать объект из хранилища, вместо этого использовать что-то вроде currPage.Link("text:=next"), это будет искать ссылку с "next" в качестве текстасвойство.

Еще одна вещь, которая может пойти не так, это то, что объект идентифицируется перед навигацией, а затем навигация делает его недействительным.В этом случае вам следует использовать метод RefreshObject (как описано в документации).

Если ни одно из этих предложений не помогло, пожалуйста, предоставьте больше информации о том, что именно «застревает»

...