分度器のドキュメントでは、次の例を参照してください。
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');
これは要素を見つけますが、「名前」に一致する要素が複数あるという警告も出します。残念ながら、それが選択するものは正しいものではありません。
だから、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 に欠陥がある可能性があると思いますか?