2017-05-30 4 views
1

Ich versuche, eine Zählung der Arraylist & dann versuchen, das Vorhandensein von Schlüsselwort in den Werten des Arrays zu bestätigen. Unten ist mein Code, der Probleme hat;Kann das Vorhandensein eines Schlüsselworts in einer Arraylist nicht bestätigen

describe('My Test', function() { 

    it('Test starts', function() { 

    browser.ignoreSynchronization = true; 
    browser.get('https://www.w3schools.com/angular/'); 

    browser.sleep(5000).then(function(){}); 
    var results = element.all(by.css(".sidesection>p>a")); 

    var results_count=results.count().then(function(counting){ 
     console.log("There are total "+counting+" lines"); 
     return counting; 
    }) 
    results_count.then (function(count){ 
     console.log("There are totalx "+count+" lines"); 

     for (var iterate=1;iterate<count;iterate++){ 

     results.get(iterate).getText().then(function(text){ 
      console.log("The text in Relationship Type node line "+iterate+" is ---"+text); 
      expect(text.indexOf('Navigation')!=-1).toBeTruthy(); 
     })  
     } 
    }) 
    }) 

}) 

Ausgang:

There are total 19 lines 
There are totalx 19 lines 
The text in Relationship Type node line 19 is ---Dropdowns 
The text in Relationship Type node line 19 is ---Accordions 
The text in Relationship Type node line 19 is ---Convert Weights 
The text in Relationship Type node line 19 is ---Animated Buttons 
The text in Relationship Type node line 19 is ---Side Navigation 
The text in Relationship Type node line 19 is ---Top Navigation 
The text in Relationship Type node line 19 is ---JS Animations 
The text in Relationship Type node line 19 is ---Modal Boxes 
The text in Relationship Type node line 19 is ---Progress Bars 
The text in Relationship Type node line 19 is ---Parallax 
The text in Relationship Type node line 19 is ---Login Form 
The text in Relationship Type node line 19 is ---HTML Includes 
The text in Relationship Type node line 19 is ---Google Maps 
The text in Relationship Type node line 19 is ---Loaders 
The text in Relationship Type node line 19 is ---Tooltips 
The text in Relationship Type node line 19 is ---Slideshow 
The text in Relationship Type node line 19 is ---Filter List 
The text in Relationship Type node line 19 is ---Sort List 
[31mF[0m 

Failures: 
1) My Test Test starts 
    Message: 
[31m Expected false to be truthy. 

I 2 Abfragen hier mit bin, an dem ich stecke:

1.) Warum ich bin immer die Nummer 19 in der ganzen Liste von Werten fest einprogrammiert, Ich möchte die Anzahl der Ausgänge iterativ wie 1,2,3,4 ... so

2.) Warum ist meine expect-Anweisung fehlgeschlagen, obwohl das Schlüsselwort in einigen der Array-Werte vorhanden ist.

Könnte jemand mich im Verständnis korrigieren & bekommen die oben genannten 2 Probleme gelöst?

Antwort

1

On (1) Ich bin nicht positiv, aber ich kann auf jeden Fall beantworten (2) helfen, Ihren Code ein wenig verbessern

1) Dies scheint die klassische for Schleife Umfang Problem, wo die Schleife abgeschlossen ist bis es heißt ... Siehe this question als Referenz. Nicht positiv, wie dies mit dem Winkelmesser und der Ausführung des Kontrollflusses ins Spiel kommt.

2) Ihre Erwartung schlägt fehl, weil es jede Zeile prüft, Sie sagen, der Zustand jeder Textzeile im Vergleich zu 'Navigation' wird als truthy ausgewertet. Dies wird für einige von ihnen fehlschlagen (d. H. Diashow, Tooltips, Loader usw.). Du brauchst eine bessere Behauptung, zum Beispiel könntest du einfach die Links 1: 1 machen: expect(results.get(i).getText()).toEqual('Help'), oder du könntest ein Array von Nav-Elementen erstellen und erwarten, dass sie übereinstimmen usw. ... aber du brauchst definitiv eine bessere Behauptung. Was genau versucht dieser Test zu machen?

So oder so, hier ist etwas Hilfe mit Ihrem Code im Allgemeinen:

  1. Sie haben nicht wirklich for Schleifen in Winkelmesser müssen, es sei denn, Sie etwas ganz Konkretes tun. Sie können einfach each verwenden, um über einen ElementArrayFinder zu iterieren.
  2. Dies ist mehr Semantik, aber Sie können einen Wert verwenden, der von einem Versprechen zurückgegeben wird, anstatt es einer Variablen zuzuordnen, ein Teil Ihres Codes ist etwas redundant. Sie können den Teil über results_count weglassen, wenn Sie es wie folgt implementieren:

    results.count().then(function(counting){ 
        console.log("There are total "+counting+" lines"); // logs 19 
        return counting; 
    }).then(function (count) { 
        console.log(count); // logs 19 
        for(var i = 0; i<count; i++) { 
    
        } 
    }) 
    

Aber auch hier for Schleifen sind nicht wirklich notwendig, in Protractor. Stattdessen können Sie einfach each verwenden, was Ihren Code prägnanter macht und auch das Problem mit dem Loop-Verschluss beseitigt:

Verwandte Themen