2017-04-19 1 views
0

Ich versuche auf Links auf einer Seite klicken und in der Lage, nur die erste Seite zu tun. Es gibt vier weitere, die ähnlichen Code haben, aber es sagt, dass es die anderen vier nicht finden kann.Wie finde ich ähnliche HTML-Elemente in Watir mit Ruby

Dies ist die Codezeile, die funktioniert:

@browser.div(class:'ms-vb itx').link(:text =>'Rapid Alignment').click 

Dies ist einer der vier, die nicht funktioniert:

@browser.div(class:'ms-vb itx').link(:text =>'Design Develop Integrate and Test').click 

HTML:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div> 

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div> 
+0

Es ist nicht klar, können Sie mehr beschreiben –

+0

So gibt es 5 Links auf einer Seite. Alle 5 haben einen ähnlichen Quellcode. Ich versuche, auf jeden von ihnen zu klicken und nur den ersten zu tun, obwohl ich die anderen 4 auf die gleiche Weise anrufe. Der erste Link ist auf der Seite als 'Rapid Alignment' sichtbar und dieser Code funktioniert, um den Link [email protected] (Klasse: 'ms-vb itx') zu finden. Link (: text => 'Schnelle Ausrichtung') . Der zweite Link ist auf der Seite als 'Design Develop Integrate and Test' sichtbar und dieser Code funktioniert nicht, um ihn zu finden [email protected] (Klasse: 'ms-vb itx'). Link (: text => 'Design Develop Integrieren und Testen ').Klick – Bhuvana

+0

Was meinst du mit "funktioniert nicht"? Lautlos? Wirft einen 'unable to locate element' Fehler? Ohne das zugehörige HTML ist es nur Spekulation. Bitte bearbeiten Sie die Frage und fügen Sie den HTML-Code hinzu. – orde

Antwort

0

Sie müssen angeben, welche <div> Sie anvisieren. Es gibt zwei oder möglicherweise mehrere <div> Tags mit demselben Attribut class.

Vor diesem HTML-Schnipsel:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div> 

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div> 

Sie müssen die entsprechenden <div>, indem Sie den Index im Locator Ziel:

p b.div(:class => 'ms-vb itx').link(:text => 'Rapid Alignment').exists? 
#=> true 
p b.div(:class => 'ms-vb itx').link(:text => 'Design Develop Integrate and Test').exists? 
#=> false 
p b.div(:class => 'ms-vb itx', :index => 1).link(:text => 'Design Develop Integrate and Test').exists? 
#=> true 

aber Elemente von Index-Ortung kann zerbrechlich sein, ob und wann UI Elemente ändern sich. Sie sollten über die Attribute id nachsehen, die - nach spec - eindeutig sind.

+0

Dies ist völlig unnötig, da Link-Text selbst genug ist, um den Link zu identifizieren. – RAJ

+0

Das hat funktioniert. Danke an alle. – Bhuvana

+0

"Sie sollten in Betracht ziehen, die ID-Attribute zu verwenden, die eindeutig sein sollten." IDs _müssen_ entsprechend der Spezifikation eindeutig sein. –

1

ich denke, Problem ist die Verwendung von #div, die ein einzelnes div

zurückgeben wird

Versuchen Sie stattdessen

divs = @browser.divs(class:'ms-vb itx') 

Dann

divs.each do |d| 
    d.link.click 
end 

#divs ein DivCollection liefert die select beispiels einschließlich solcher Dinge wie wie gut funktionieren Enumerable so alle Enumerable Methoden beinhaltet

divs.select { |d| d.link(:text =>'Rapid Alignment') } 
+0

Ihr Code wird fehlschlagen, wenn einer der Abteilung nicht die Verbindung hat und Ihr letzter Code ist nicht einmal eine erwartete Antwort, sie will nicht einen Link, der den Text der schnellen Ausrichtung hat, will sie alle klicken Verknüpfung. – RAJ

+1

@RAJ das war ein Beispiel, wie man die Frage erleichtern kann. Die Annahme ist, dass "ms-vb itx" ein Link-Wrapper ist und basierend auf dem HTML-Code scheint dies der Fall zu sein. Wie bei 'select' war es ein Beispiel, wie der gewünschte Link aus der' DivCollection' herausgefiltert werden kann. P.S. Ihr Code wird auch nicht funktionieren (die in Glashäusern) – engineersmnky

0

Dies schlägt fehl, weil div gleiche ist, so dass es das gleiche div jedes Mal zu finden versucht, und startet den angegebenen Link zu suchen, so dass es nicht zweites Mal, wenn Sie den anderen Link zu finden versucht.

Eigentlich brauchen Sie nicht von div diesen Link zu finden, geben Sie einfach diesen Code schreiben es

b.link(:text=>'Rapid Alignment',:visible=>true).click 

b.link(:text=>'Design Develop Integrate and Test',:visible=>true).click 

Das Linktext selbst ist die Identifikation zu diesem Link funktioniert, Sie brauchen also nicht jeder Teilung schreibe direkt b.link(), es reicht.

+0

ohne den Index, es spuckte den Fehler nicht in der Lage, den Fehler zu lokalisieren. Vielen Dank. – Bhuvana

+0

@Bhuvana Sie brauchen keinen Index, solange Ihr Linktext eindeutig ist. Versuchen Sie einfach, 'b.a (: text, 'Rapid Alignment') zu schreiben. Klicken Sie darauf, es wird sicherlich funktionieren. – RAJ

+0

@Raj, es funktioniert nicht. Gibt den Fehler an Element ist momentan nicht sichtbar und darf daher nicht interagiert werden. – Bhuvana

Verwandte Themen