web-dev-qa-db-fra.com

Rapporteur clair () ne fonctionne pas

J'ai deux tests:

  it('should filter the phone list as user types into the search box', function() {

    var results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
            expect(arr.length).toEqual(3);
    });

    var queryInput = ptor.findElement(protractor.By.input('query'));

    queryInput.sendKeys('nexus');

    results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
        expect(arr.length).toEqual(1);
    });

    queryInput.clear();
    queryInput.sendKeys('Motorola');

    results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
        expect(arr.length).toEqual(2);
    });

});

it('should display the current filter value within an element with id "status"',
    function() {
        //expect(element('#status').text()).toMatch(/Current filter: \s*$/);
        var queryInput = ptor.findElement(protractor.By.input('query'));
        queryInput.clear();

        expect(ptor.findElement(protractor.By.id('status')).getText()).toMatch('Current Filter:');

        //input('query').enter('nexus');

        //queryInput.clear();
        //queryInput.sendKeys('nexus');

        //expect(element('#status').text()).toMatch(/Current filter: nexus\s*$/);
        //expect(ptor.findElement(protractor.By.id('status')).getText()).toMatch('^\Current Filter:.');

        //alternative version of the last assertion that tests just the value of the binding
        //using('#status').expect(binding('query')).toBe('nexus');
    });

le premier test, la zone de recherche, fonctionne très bien. le deuxième test, status, ne réussit pas car la dernière valeur entrée dans queryInput est reportée au deuxième test et le queryInput.clear () ne fonctionne pas. Cependant, dans le deuxième test, si je lance un appel queryInput.sendKeys ("quelque chose"), "quelque chose" s'affichera. Si je retire clear () dans le deuxième test, je verrai "motorolasomething". Donc, même s'il semble que clear () fonctionne, mon test ne réussit pas si j'ai juste clear () dans le deuxième test, lorsque j'exécute le deuxième test, je vois "Motorola", même lorsque clear () est appelé avant le deuxième test.

Je me demande pourquoi clear () ne s'efface pas dans le deuxième test alors que je n'ai pas de sendKeys () après.

19
bmw0128

La documentation de clear () dit ce qui suit:

[! webdriver.promise.Promise] effacer ()

Planifie une commande pour effacer la {@code value} de cet élément. Cette commande n'a aucun effet si l'élément DOM sous-jacent n'est ni un élément text INPUT ni un élément TEXTAREA.

Renvoie: Une promesse qui sera résolue lorsque l'élément aura été effacé.

donc pour être clair à faire ce que vous voulez, vous devez travailler avec la promesse que cela revient! pour ce faire, vous devez utiliser then()

voici comment cela fonctionne:

queryInput.clear().then(function() {
    queryInput.sendKeys('Motorola');
})

donc clear() vous renvoie une promesse d'effacement de l'entrée et then() indique à la promesse quoi faire dès que l'entrée est effacée.

37
Michael K.

attendent element.sendKeys (Keys.chord (Keys.CONTROL, 'a'));

attendre element.sendKeys (Keys.DELETE);

5
Mary

Clear().then(..) ne fonctionne pas pour moi.

Voici donc mon travail:

queryInput.sendKeys(protrator.Key.chord(protrator.Key.CONTROL, 'a'));
queryInput.sendKeys('nexus')
3
Josf

Vous pouvez combiner des promesses en une chaîne:

queryInput.clear().sendKeys('nexus');

1
Dmytro Tolkachov