2016-03-22 13 views
2

Ich versuche einen Winkelmessertest zu erstellen, der eine Drittanbieterkomponente von Cloudinary verwendet. Ich war bisher erfolglos bei der Suche nach einem Element.Protractor Chained Element Confusion

Das HTML sieht wie folgt aus:

<div class="header" id="cloudinary-navbar"> 
 
    <ul class="sources clear"> 
 
    <li class="source local active" data-source="local"> 
 
     <span class="label" data-text-key="sources.local.title">My files</span> 
 
     <span class="icon"></span> 
 
    </li> 
 
    <li class="source url" data-source="url"> 
 
     <span class="label" data-text-key="sources.url.title">Web Address</span> 
 
     <span class="icon"></span> 
 
    </li> 
 
    <li class="source camera" data-source="camera"> 
 
     <span class="label" data-text-key="sources.camera.title">Camera</span> 
 
     <span class="icon"></span> 
 
    </li> 
 
    </ul> 
 
    <a class="close" href="#">×</a> 
 
</div>

Ich versuche, die zweite li und tun dies zu finden:

var webLinkButton = element(by.id('cloudinary-navbar')).element(by.css('.url')); 

ich die folgende Fehlermeldung erhalten:

Message: 
    Failed: No element found using locator: By(css selector, *[id="cloudinary-navbar"]) 
    Stack: 
    NoSuchElementError: No element found using locator: By(css selector, *[id="cloudinary-navbar"]) 

Das ist verwirrend für mich, weil ich nicht nach cloudinary-navbar von CSS suchen.

Wie soll ich dieses Element finden?

Antwort

2

No element found using locator: By(css selector, *[id="cloudinary-navbar"])

*[id="your_id"] ist, was WebDriverJS actually uses "von id" Lookups durchzuführen.

In Ihrem Fall sollte dies nicht relevant sein, da der Locator selbst korrekt ist und das Element gefunden werden sollte. Dies sind die häufigsten Gründe für Ihre „Element nicht gefunden“ Problem:

  • das Element innerhalb eines iframe und Sie müssen es wechseln:

    browser.switchTo().frame("frame_name_or_id"); 
    
  • Sie müssen Warte für das Element explizit vorhanden, sein:

  • Element tatsächlich nicht vorhanden ist, müssen Sie eine zusätzliche Aktion zu machen, dafür erscheinen - ein Menü öffnen, zum Beispiel

+0

Du bist, richtig: Ich habe nicht bemerkt, dass ein iframe durch die erstellt wurde Widget. Ich benutze 'switchTo() .frame (0)', weil ich keine besseren Selektoren finden konnte. Ich habe auch 'switchTo(). DefaultContent()' verwendet, um zurück zu schalten. Vielen Dank! – objectuser