wake-up-neo.com

Winkelmesser Prüfen Sie, ob das Element nicht vorhanden ist

Ich habe in meiner winkelbasierten Website eine Einstellung, die ein Dropdown-Menü aktiviert bzw. deaktiviert. Wenn es deaktiviert ist, wird es nicht auf der Hauptseite angezeigt. 

Bei Protractor muss ich überprüfen, ob dieses Element nicht vorhanden ist, wenn der Schalter ausgeschaltet ist. Ich sollte jedoch nicht in Element Not Found Error geworfen werden, da dies ein Test in einer Menge von vielen ist. Wie soll ich das machen?

Ich habe versucht zu tun: 

expect($$('.switch').count()).to.equal(0).and.notify(next);

Aber ich bekomme einen AssertionError mit diesem ...

26
Sakamoto Kazuma

Die Sache funktioniert mit etwas, das ich in den Dokumenten gefunden habe:

expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);

Verwendet auch Assertionen, damit Gurken nicht brechen.

23
Sakamoto Kazuma

Eine andere Option, die für mich ein bisschen besser funktioniert hat und die Art und Weise der Verwendung von Winkelmessern verwendet http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.all

element.all(by.css('.k-loading-image')).then(function(items) {
    expect(items.length).toBe(0);
});

(Ich wollte überprüfen, ob ein Ladekennzeichen verschwunden ist.)

30
Carl

Ich habe es so zum Laufen gebracht: 

expect(element(by.css('css')).isPresent()).toBeFalsy();
4
Daniel

keine dieser Antworten, die count() enthalten, hat für mich funktioniert;

der Typ von $$ ('. selector'). count () ist 'object'

sie müssen das Versprechen verwenden, um den count-Wert auf diese Weise herauszuziehen.

const nameSelector = '[data-automation="name-input"]';
const nameInputIsDisplayed = () => {
    return $$(nameSelector).count()
        .then(count => count !== 0)
}
it('should not be displayed', () => {
    nameInputIsDisplayed().then(isDisplayed => {
        expect(isDisplayed).toBeFalsy()
    })
})
3
activedecay

Diese Antworten warten nicht auf das Verschwinden des Elements. Um auf das Verschwinden zu warten, müssen Sie die erwarteten Bedingungen wie unten verwenden. InvisibilityOf erkennt, ob ein Element das DOM verlassen hat. In den Dokumenten finden Sie es hier: https://www.protractortest.org/#/api?view=ProtractorExpectedConditions .

  export const invisibilityOf = (el) =>
     browser.wait(ExpectedConditions.invisibilityOf(el) as any, 12000, 
    'Element taking too long to disappear in the DOM')
  const el = element(by.css(arg1))
  return invisibilityOf(el)
1
evanjmg

stalenessOf kann ein guter Weg sein, um zu gehen: Winkelmesser - ExpectedConditions.stalenessOf

Zum Beispiel haben Sie ein aktuell geöffnetes Modal. Sie schließen es und erwarten, dass es nicht anwesend ist:

element(by.css('.modal-dialog .cancel-button')).click();
browser.wait(EC.stalenessOf(element(by.css('.modal-dialog')), 60000);
expect(element(by.css('.modal-dialog')).isPresent()).toBeFalsy();
0
Boris Yakubchik