2016-05-09 9 views
0

Mein Problem gefunden:kann nicht gefunden Element Rekursion verwenden, nachdem er es als sichtbar

Ich versuche Optionen in einem Drop-Down mit Nachtschwärmer zu klicken, indem Abschnitte in Seitenobjekten. Ich bin mir nicht sicher, ob es ein Problem mit der Abschnittsdeklaration ist oder mir etwas fehlt, das mit dem Umfang zusammenhängt. Problem ist, dass es das Element als sichtbar findet, aber wenn es versucht zu klicken, wird es einen Fehler werfen, dass es es nicht finden kann, Rekursion verwendend.

Was könnte ich versuchen, um dieses Problem mit Abschnitten zu beheben?

Im Test:

var myPage = browser.page.searchPageObject(); 
var mySection = searchPage.section.setResults; 

// [finding and clicking the dropdown so it opens and displays the options] 
browser.pause (3000); 

browser.expect.section('@setResults').to.be.visible.before(1000); 
myPage.myFunction(mySection, '18'); 

auf der Seite Objekt:

var searchKeywordCommands = { 
    myFunction: function (section, x) { 
     section.expect.element('@set18').to.be.visible.before(2000); 
     if (x == '18') section.click('@set18'); 
     //[...] 
}; 

module.exports = { 
    //[.. other elements and commands..] 
    sections: { 
     setResults: { 
      selector: '.select-theme-result', //have also tried with '.select-content' and '.select-options' but with the same result 
      elements: { 
       set18: '.select-option[data-value="18"]', 
       set36: '.select-option[data-value="36"]' //etc 

      }}}} 

Hier ist meine Quellcode: enter image description here

Wenn ich laufe dieses Stück Kern , scheint es den Abschnitt zu finden, findet das Element sichtbar (ich auch kann deutlich sehen, dass es die Drop-down und zeigt die Optionen öffnet), aber wenn jede Option zu klicken versuchen, erhalte ich die Fehlermeldung: ERROR: Unable to locate element: Section[name=setResults], Element[[email protected]]" using: recursion

Hier ist der vollständige Fehler: enter image description here

Meine Versuche:

Ich habe versucht, das set18 Selektor als ein einzelnes Element anstelle von innerhalb des Abschnitts zu deklarieren, und alles funktioniert gut auf diese Weise, aber wird nicht innerhalb des Abschnitts arbeiten. Ich habe auch alle verfügbaren Selektoren ausprobiert, um den Selektor des Abschnitts zu definieren, aber es wird mit keinem von ihnen funktionieren.

Antwort

0

Das ist, was ich tue mit (LOL) Ich nehme an, Schritte wären (Dropbox finden - Dropbox klicken - Wert auswählen).

var getValueElement = { 
     getValueSelector: function (x) { 
      return 'li[data-value="'+ x + '"]'; 
     } 
}; 

module.exports = { 
    //[.. other elements and commands..] 
    sections: { 
     setResults: { 
      commands:[getValueElement], 
      selector: 'div[class*="select-theme-result"', //* mean contains,sometime class is too long and unique,also because i am lazy. 
      elements: { 
       setHighlight:'li[class*="select-option-highlight"]', 
       setSelected:'li[class*="select-option-selected"]', 
       //set18: 'li[data-value="18"]', 
       //set36: 'li[data-value="36"]' 
       // i think getValueFunction is better,what if you have 100+ of set. 

      }}}} 

In Ihrem Test

var myPage = browser.page.searchPageObject(); 
var mySection = searchPage.section.setResults; 

// [finding and clicking the dropdown so it opens and displays the options] 
mySection 
    .click('@dropboxSelector') 
    .waitForElementVisible('@setHighlight',5000,false, 
      function(){ 
      var set18 = mySection.getValueElement(18); 
      mySection.click(set18); 
      }); 

Ps: in meinem Fall (ich glaube, Ihren Fall auch), Dropbox oder jeden kleinen Fremd js Rahmen, die oft in Ihrem Web-App verwendet wird, so besser erstellen Sie ein anderes PageObject dafür, make pageObject/section ist so einfach wie möglich.

+0

vor allem, wie kann ich auf diese getValueElement Funktion zugreifen? Es wird der Fehler ausgegeben, dass es keine Funktion sowohl für mySection.getValueElement (18) als auch für myPage.getValueElement (18) ist. – anasarbescu

+0

ok, ich denke, ich habe es geschafft, es muss eine separate Funktion im Befehl sein, nicht der Befehl muss eine Funktion sein. aber jetzt bekomme ich: FEHLER: Kann Element nicht finden: "li [Daten-Wert = 18]" mit: CSS-Selektor – anasarbescu

+0

Können Sie Ihren Browser öffnen - F12 - in Element Registerkarte, finden Sie die kürzeste Zeichenfolge für "li [Daten-Wert = 18] "CSS Selektor? –