20

2 つのテストがあります。

  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');
    });

最初のテストである検索ボックスはうまく機能します。queryInput に入力された最後の値が 2 番目のテストに引き継がれ、queryInput.clear() が機能しないため、2 番目のテスト status はパスしません。しかし、2回目のテストで、queryInput.sendKeys("something") を呼び出すと、"something" が表示されます。2 番目のテストで clear() を取り出すと、「motorolaso​​mething」が表示されます。したがって、clear() が機能しているように見えますが、2 番目のテストに clear() があるだけではテストに合格しません。2 番目のテストを実行すると、clear() が呼び出されても「motorola」と表示されます。二次試験前。

後に sendKeys() がないのに、2 番目のテストで clear() がクリアされないのはなぜでしょうか。

4

6 に答える 6

41

clear() のドキュメントには、次のように記載されています。

[ !webdriver.promise.Promise ]クリア( )

この要素の {@code value} をクリアするコマンドをスケジュールします。基礎となる DOM 要素がテキストの INPUT 要素でも TEXTAREA 要素でもない場合、このコマンドは効果がありません。

戻り値: 要素がクリアされたときに解決される promise。

したがって、やりたいことを明確にするためには、それが返されるという約束を持って作業する必要があります! そのためには、使用する必要がありますthen()

これがどのように機能するかです:

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

soclear()は、入力をクリアするプロミスを返しthen()、入力がクリアされるとすぐに何をすべきかをプロミスに伝えます。

于 2014-11-21T19:54:50.410 に答える