2016-03-27 8 views
2

In meiner Angular App, ich schreibe die Automatisierung Test-Suiten der Anwendung mit Winkelmesser, und ich konfrontiert mit Problem, wie Spinner zu testen, warten auf den Spinner vom Bildschirm verschwinden. Ich habe versucht, einige wiederverwendbare Funktion für die Handhabung Spinner, und sehen aus wie es funktioniert gut, aber wenn Spinner im Popup-Fenster befindet, empfing ich Fehler: "... Failed: Veraltete Element Verweis: Element ist nicht an das Seitendokument angefügt ... ", wie ich verstehe, konnte der Winkelmesser das angegebene Element nicht finden, weil nach dem Schließen des Popup-Fensters der Spinner aus dem DOM mit dem Popup entfernt wurde. In meiner Funktion habe ich versucht, diese Winkelmesser Methoden zu verwenden: browser.wait (EC.invisibilityOf ($ ('# abc')), 5000); browser.wait (spinner.isDisplayed(), 5000); Wie ich verstehe, ist der Grund, dass browser.wait in der Schleife innerhalb Zustand laufen, bis es wahr oder Timeout auftritt, aber ich weiß nicht, um es zu beheben. Bitte helfen ...Testen von Spinnern mit Winkelmesser auf Popup-Fenster

Meine Lust Funktion mit zusätzlichen Kontroll für Geschenke: this.selector - Mutterelement (Taste)

waitBtnSpinner() { 
    let spinner = this.selector.element(by.css('.btn-spinner')); 
    spinner.isPresent().then((isPresent) => { 
     if(isPresent) { 
     spinner.isDisplayed().then((isDisplayed) => { 
      return browser.wait(this.EC.invisibilityOf(spinner), 10000); 
     }) 
     } else { 
     return isPresent; 
     } 
    }); 
    }; 

Antwort

0

Eine zuverlässigere Art und Weise für einen einzelnen Wähler zu warten wäre Null zurück sichtbare Spinner. Und den richtigen Messaging im Fall eines Ausfalls zu liefern, würde ich eine „Bedingung“ implementieren:

var By = webdriver.By; 
var EC = webdriver.until; 

// define a condition that is true when the locator doesn't match any element 
EC.noElement = function (locator, message) { 
    return new EC.Condition(message + ' ' + locator, function(driver) { 
    return driver.findElements(locator).then(function(elements) { 
     return elements.length === 0; 
    }); 
    }); 
}; 

// define a condition that is true when there is no visible spinner 
EC.noSpinner = EC.noElement(By.css('.spinner[ng-sow]'), 'for no visible spinner'); 


// usage to wait for no visible spinner 
driver.wait(EC.noSpinner, 10000); 

Beachten Sie, dass Sie benötigen den Css-Locator „.spinner [ng-Sau]“ mit einem Locator passend ein Update sichtbares Spinner in Ihrer Seite.

+0

thx viel Hilfe, für mich funktioniert perfekt ... – Den

0

Versuchen Sie diese.

element.all(by.model('model of the Spinner')).each(function (eachElement, index) 
{ 
     eachElement.click(); 
     browser.driver.sleep(500); 
     element(by.css('Unique Selector of the Spinner value')).click(); 
     browser.driver.sleep(500); 
}); 

Ich hoffe, dies hilft. :)