web-dev-qa-db-ja.com

分度器clear()が機能しない

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()を取り出すと、「モトローラサムシング」が表示されます。だから、clear()が動作しているように見えますが、2回目のテストでclear()を持っている場合、2回目のテストを実行すると、clear()が呼び出されても「Motorola」が表示されます2番目のテストの前。

2番目のテストでsendKeys()が後にないのに、なぜclear()がクリアされないのか疑問に思っています。

19
bmw0128

Clear()のドキュメントには、次のことが記載されています。

[!webdriver.promise.Promise] clear()

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

Returns:要素がクリアされたときに解決される約束。

したがって、あなたがやりたいことを明確にするためには、それが返ってくるという約束を守らなければなりません!そのためには、then()を使用する必要があります

仕組みは次のとおりです。

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

したがって、clear()は入力をクリアする約束を返し、then()は入力がクリアされるとすぐに何をするかを約束に返します。

37
Michael K.

await element.sendKeys(Keys.chord(Keys.CONTROL、 'a'));

await element.sendKeys(Keys.DELETE);

5
Mary

Clear().then(..)は機能しません。

だからこれは私の回避策です:

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

約束をチェーンに結合できます。

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

1