分度器のドキュメントで、次の例を確認します。
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
ここではっきりしているのは、「by.model」を使用して入力ボックスに値を設定できることですが、入力ボックスを見て内容を確認したい場合は、「by.binding」を使用する必要があります。
私は(要約すると)私がしているコードのセットを持っています:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(実際のコードでは、エンティティを保存してから編集モードでエンティティに戻り、実際に値が保存されたことを確認しています。ただし、結局は同じことであり、このサンプルコードでも同じ問題が発生します)。
これは私にエラーを与えます:
Error: Expected '' to equal 'A value'.
理論的には、ドキュメントの例に従って、代わりに次のことができます:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
しかし、by.bindingは完全修飾モデルを好きではないようです。エラーが発生します。
Error: No element found using locator: by.binding("risk.name")
私がした場合、それは(ファッションの後)動作します:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
これは要素を見つけますが、 'name'に一致する要素が複数あることを警告します。そして、残念なことにそれが選ぶものは正しいものではありません。
したがって、2つの質問:
- by.modelはgetText()を返すことができますか、それともそれを行わないという設計上の決定があり、代わりにby.bindingを使用する必要がありますか?
- by.bindingで完全修飾エンティティを使用できますか、それともby.bindingが完全なモデル名を好まないという設計上の決定がありますか?その場合、別のバインディングから選択するために他にどのような修飾子を使用できますか?
編集:
私はvdrulerzによって提案されたソリューションも試しましたが、次のようにコードを変更しました。
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
console.logが(promiseやオブジェクトではなく)空白の値を返し、expectが失敗して次のメッセージが表示されます。
Expected '' to equal 'A risk name'.
私の理解は、分度器が約束に対処する期待をすでにパッチしているので、根本的な問題はgetTextがモデルで識別されたフィールドで機能しないことだと感じています(ラベルや他のウィジェットでgetTextを正常に実行できます)。
getText()ではなくgetAttributeを使用して、次のコードを実行することもできます。
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
最初の部分は合格します-期待は機能します。2番目の部分も機能し、vdrulerzの構文も有効であり、コンソールに「true」を記録します。getTextに潜在的に欠陥があると思いますか?