2017-01-13 2 views
2

Ich versuche, aktuelle URL zu erhalten und möchte es als String speichern, aber. dann ist immer zurück undefined. Im Anschluss wird der Funktionscode:Winkelmesser: browser.getCurrentUrl(). Dann ((url) => {return url;}); immer zurück undefined

navigateToLandingPage() { 
      let EC = protractor.ExpectedConditions; 
      let currentURL: string; 
      browser.getCurrentUrl().then ((url) => { 
      currentURL = url; 
      }); 
      if (currentURL !== 'operator') { 
      browser.get('localhost:3000/#/operator'); 
      browser.wait(EC.urlContains('/operator'), 10000); 
     } 

ich es nenne bilden spec auf diese Weise:

describe('Checking Module',() => { 
    let page: CalendarModule; 
    let EC = protractor.ExpectedConditions; 
    beforeEach(() => { 
    page = new CalendarModule(); 
    }); 
    it('Clicking on Calendar should redirect to Calendar Module',() => { 
     page.commonMethodObj.navigateToLandingPage(); 
     let calendarLink = page.getCalendarLink(); 
     calendarLink.click().then(() => { 
     browser.wait(EC.urlContains('/calendar'), 50000); 
     expect(browser.getCurrentUrl()).toMatch('/calendar'); 
     }); 
    }); 
}); 

ich verwende folgenden Versionen von Abhängigkeiten:

"@angular/core": "2.3.1", 
"jasmine-core": "2.5.2", 
"jasmine-spec-reporter": "2.5.0", 
"protractor": "~4.0.13" 
+0

' calendarLink.click() Methode ist dann möglich; es wird jedoch nicht benötigt, da der Winkelmesser diese asynchronen Aufrufe synchron mit jasminewd erscheinen lässt. – cnishina

Antwort

3

Das gesamte Verhalten und die Ablauf der Codeausführung ist asynchron und orchestriert von der WebDriver Control Flow. Mit anderen Worten, können Sie nicht erwarten, dass currentURL Variable tatsächlich den aktuellen URL-Wert in dieser Zeile erhalten würde:

if (currentURL !== 'operator') { 

Stattdessen Arbeit innerhalb des Callback-: `

browser.getCurrentUrl().then ((currentURL) => { 
    if (currentURL !== 'operator') { 
     browser.get('localhost:3000/#/operator'); 
     browser.wait(EC.urlContains('/operator'), 10000); 
    } 
}); 
+0

Ja richtig !! Aber was, wenn ich etwas von Versprechen zurückgeben und es später benutzen möchte. Wie könnte es dann erreicht werden ?? –

+0

@ArjunSingh genial, können Sie das verzögerte Objekt verwenden ([Beispiel] (http://StackOverflow.com/A/24290262/771848)). – alecxe

Verwandte Themen