2017-12-10 3 views
0

Ich habe einige, wie implementiert die Funktion zu warten, bis Seite in intern 4 mit TypeScript geladen wird. Aber manchmal funktioniert es nicht und wirft TimeOutEror, auch wenn ich den Fehler in der Funktion abfange. Kann jemand bitte überprüfen und sagen Sie mir was falsch ist.warten bis Seite geladen ist Funktion in Praktikanten 4 mit Typescript?

Heres meine Implementierung:

export abstract class AdvalentBasePage { 
    remote: any; 
    waitTime: number = -1; 
    locator: any; 

    constructor(remote: any, locator: any) { 
     this.remote = remote; 
     this.locator =locator ; 

    } 

    abstract getPageTitleXpath(): string; 


    getPageTitleElement() { 
     return this.remote.findByXpath(this.getPageTitleXpath()); 
    } 

     //this function sometimes throws timeoutError even before waitTime provided in argument 
    async waitUntilPageIsFullyLoaded(waitTime: number): Promise<any> { 

     this.waitTime = waitTime; 
     var self = this; 
     try { 
      await self.remote.sleep(1000).findByXpath(self.getPageTitleXpath()); 
     } catch (e) { 
      console.log(e.name) 
      if (e.name == 'NoSuchElement') { 
       if (this.waitTime > 0) { 
        self.waitTime = self.waitTime - 1000; 
        await self.waitUntilPageIsFullyLoaded(self.waitTime); 
       } 
       else { 
        throw new Error('TimeOut Exception ') 
       } 
      } 
     } 

    } 
} 

Antwort

1

Es gibt ein paar verschiedene Timeouts im Spiel:

  1. Der Asynchron-Test Timeout - Intern Timeout wird, wenn ein Test als dies länger dauert (30 Sekunden standardmäßig), unabhängig davon, was der Test gerade macht.
  2. Der Fund Timeout - ein findBy Aufruf Timeout wird, wenn ein Element nicht innerhalb dieser Zeit (browserabhängig, in der Regel standardmäßig 0)

Es ist nicht klar, aus Ihrer Beschreibung, was der spezifische Fehler gefunden wird, ist , obwohl es sich anhört, als ob Sie in einen allgemeinen Test-Timeout-Fehler geraten könnten. Sie können das umgehen, indem Sie das Test-Timeout erhöhen (this.timeout = x oder this.async(x) in einem Test, wobei x eine Anzahl von Millisekunden ist).

Es sieht so aus, als könnten Sie Ihren Ansatz vereinfachen, indem Sie einfach ein sehr großes Such-Timeout festlegen, anstatt die Methode waitUntilPageIsFullLoaded zu erstellen. Zum Beispiel (angenommen self zeigt auf das Testobjekt):

// Make sure the test timeout is large enough to handle the time 
// required to run all test actions. 
self.timeout = 130000; 

await self.remote 
    // Set the find timeout to something huge; this is still efficient 
    // because the test will continue as soon as an element is found 
    .setFindTimeout(120000) 
    .sleep(1000) 
    .findByXpath(self.getPageTitleXpath()) 
Verwandte Themen