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()がクリアされないのか疑問に思っています。
Clear()のドキュメントには、次のことが記載されています。
[!webdriver.promise.Promise] clear()
この要素の{@code value}をクリアするコマンドをスケジュールします。基礎となるDOM要素がテキストINPUT要素でもTEXTAREA要素でもない場合、このコマンドは効果がありません。
Returns:要素がクリアされたときに解決される約束。
したがって、あなたがやりたいことを明確にするためには、それが返ってくるという約束を守らなければなりません!そのためには、then()
を使用する必要があります
仕組みは次のとおりです。
_queryInput.clear().then(function() {
queryInput.sendKeys('Motorola');
})
_
したがって、clear()
は入力をクリアする約束を返し、then()
は入力がクリアされるとすぐに何をするかを約束に返します。
await element.sendKeys(Keys.chord(Keys.CONTROL、 'a'));
await element.sendKeys(Keys.DELETE);
Clear().then(..)
は機能しません。
だからこれは私の回避策です:
queryInput.sendKeys(protrator.Key.chord(protrator.Key.CONTROL, 'a'));
queryInput.sendKeys('nexus')
約束をチェーンに結合できます。
queryInput.clear().sendKeys('nexus');