Нажмите на ссылку href в уже открытом окне браузера

В приведенном ниже коде я пытаюсь нажать на ссылку "О" (href) на веб-сайте www.google.co.in. Это работало на IE11 (Windows 10), но не работает на IE10 (Windows 7). Это в любом случае зависит от машины. Если нет, то какой код правильный?

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

Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next    ' sometimes more web pages are counted than are open
    my_url = objShell.Windows(x).Document.Location
    my_title = objShell.Windows(x).Document.Title

    'You can use my_title of my_url, whichever you want
    If my_title Like "Google" & "*" Then   'identify the existing web page
        Set ie = ,objShell.Windows(x)
        Exit For
    Else
    End If
Next

Dim LinkHref
Dim a

LinkHref = "//www.google.co.in/intl/en/about.html?fg=1"

For Each a In ie.Document.GetElementsByTagName("A")
  If LCase(a.GetAttribute("href")) = LCase(LinkHref) Then
    a.Click
    Exit For  ''# to stop after the first hit
  End If
Next
 SearchAndResQ07 июн. 2016 г., 14:07
Чтоподобно вIf my_title Like "Google" & "*" Then ?
 vinay kumar08 июн. 2016 г., 05:50
странно .... Но это работает, как я сказал в моем браузере Win10 IE11
 Dave07 июн. 2016 г., 13:12
Если вы используете QTP, возможно, было бы проще использовать встроенную автоматизацию браузера с некоторым описательным программированием, или даже просто использовать репозиторий объектов для изучения целевого сайта и навигации по нему? Лучший подход будет зависеть от вашей общей цели сценария, хотя

Ответы на вопрос(2)

Решение Вопроса

(если по какой-то причине вы не хотите использовать репозиторий объектов). Этот код должен дать вам пример того, что вы можете сделать:

Dim oDesc ' create a Description object for objects of class Link
Set oDesc = Description.Create
oDesc("micclass").value = "Link"

'Find all the Links in the browser using ChildObjects
Set obj = Browser("title=Google").Page("title=Google").ChildObjects(oDesc) 

Dim i
'obj.Count value has the number of links in the page
For i = 0 to obj.Count - 1   ' indexed from zero, so use 0 to Count -1
   'get the name of all the links in the page           
    If obj(i).GetROProperty("innerhtml")= LinkHref Then 
        obj(i).Click 'click the link if it matched the href you specfied
        Exit For ' no need to carry on the loop if we found the right link
    End If 
Next

Если вам просто нужно использовать vbscript, вы можете сделать это так:

Dim oShell : Set oShell = CreateObject("Shell.Application")
Dim oWindow
For Each oWindow In oShell.Windows
    If InStr(oWindow.FullName, "iexplore") > 0 Then 
        If InStr(1, oWindow.Document.Title, "Google", vbTextCompare) > 0 Then
            Set ieApp = oWindow
            Exit For
        End If
    End If
Next

LinkHref = "//www.google.co.in/intl/en/about.html?fg=1"

For Each linky In ieApp.Document.GetElementsbyTagName("a")
    If LCase(linky.GetAttribute("href")) = LCase(LinkHref) Then
        linky.Click
        Exit For
    End If
Next

Это в значительной степени ответ, данный выше Ансгаром, но с небольшим дополнительным, чтобы исправить ошибку объекта. Только окно браузера имеетDocument.Title, и цикл работает через каждое открытое окно, поэтому вы получаете сообщение об ошибке, когда цикл пытается открыть окно, отличное от IE. Эта версия исправляет это, проверяя толькоDocument.Title если окно было идентифицировано как экземпляр IE в первую очередь.

 Dave08 июн. 2016 г., 09:57
Я добавил в ответ только метод vbscript.
 vinay kumar08 июн. 2016 г., 10:51
Я думаю, что это не находит окно ie ... потому что он говорит, что объект требуется для "ieApp"
 vinay kumar08 июн. 2016 г., 11:14
Нет, я просто открыл google.co.in, никакой другой, т.е. окно или проводник ...
 Dave08 июн. 2016 г., 11:01
Если это наFor Each linky тогда да, код не нашел окно IE с открытой вкладкой Google. Я проверил это локально на сайте google.co.in, и это работает; у вас открыт браузер на странице Google?
 vinay kumar08 июн. 2016 г., 05:54
Спасибо, Дейв, за ваш ответ, но можно ли это сделать только в vbscript?
 Dave08 июн. 2016 г., 11:25
Возможно, вам понадобится добавить некоторые отладочные операторы, чтобы проверить, что делает скрипт. ПослеFor Each oWindow строка добавить Wscript.echooWindow.Fullname и сценарий перечислит имя каждого окна, как оно его видит. Это позволит вам проверить, действительно ли оно находит окно IE. добавлятьWscript.echo oWindow.Document.Title послеIf InStr(oWindow.FullName, "iexplore") > 0 Then линии, и он скажет вам все названия, которые он видит. Это поможет вам понять, что видно, а затем не видно ...
 vinay kumar08 июн. 2016 г., 11:45
Понял. Имя исследователя было IEXPLORE, а не iexplore!

Like оператор.

Это обычный способ присоединения к окну IE с определенным заголовком в простом VBScript:

Set app = CreateObject("Shell.Application")
For Each wnd In app.Windows
  If wnd.Name = "Internet Explorer" Then
    If InStr(1, wnd.Document.Title, "Google", vbTextCompare) > 0 Then
      Set ie = wnd
      Exit For
    End If
  End If
Next
 Dave07 июн. 2016 г., 17:11
QTP / UFT не имеетLike оператор либо ...
 Ansgar Wiechers08 июн. 2016 г., 10:41
Вы, вероятно, также открыли (файл) Windows Explorer. Смотрите обновленный ответ.
 vinay kumar08 июн. 2016 г., 05:59
@Ansar Wiechers. Это говорит: «Объект не поддерживает это свойство или метод» «wnd.Document.Title».

Ваш ответ на вопрос