[解決済み] 分度器で入力のテキストを取得する方法
質問
protractor のドキュメントに、以下のような例があります。
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'.
理論的には、docsからの例に従って、私は代わりに行うことができます。
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が完全なモデル名を好まないという設計上の決定があるのでしょうか? もしそうなら、異なるバインディングを選択するために、他にどのような修飾語を使用することができますか?
EDIT。
vdrulerzさんが提案された解決策も試しましたが、以下のようにコードを修正しました。
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
console.logは空白の値(プロミスでもオブジェクトでもない)を返しており、expectはメッセージを与えて失敗しています。
Expected '' to equal 'A risk name'.
私の理解では、protractorはすでにexpectにパッチを当ててプロミスを処理しているので、根本的な問題はモデル経由で識別されたフィールドで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');
});
最初の部分はパスします - expectが動作します。 2番目の部分も動作し、vdrulerzの構文も有効であることを示唆しており、コンソールに'true'を記録しています。 私は、getTextに潜在的な欠陥があると思います。
どのように解決するのですか?
これはProtractor FAQで回答されています。 https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-empty
input要素からgetTextを実行した結果は常に空です。
これはwebdriverの癖で、要素は常に空のgetText値を持っています。代わりに、試してみてください。
element.getAttribute('value')
質問2については、はい、あなたはby.bindingに完全修飾名を使用することができるはずです。私はあなたのテンプレートが{{}}またはng-bindを介してrisk.nameにバインドされている要素を実際に持っていないことを疑います。
関連
-
[解決済み] AngularJSのディープリンクとは何ですか?
-
処理されない例外が発生しました。Angular 実行中のプロジェクトで NGCC に失敗しました。
-
角型グローバル確認ボックス
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] AngularJSとHandlebars - 両方必要なのかどうか
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] angularJSの::の意味するところ
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] 入力フィールドにフォーカスを当てるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] `ui-router` $stateParams vs. $state.params
-
[解決済み] AngularJsでng-Cloakディレクティブを実際に使用する方法とは?
-
[解決済み] エラーです。10回の$digest()反復に達しました。動的なsortby述語で中断!?
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] Angularのui-routerでデフォルトの状態を設定する方法
-
angularjs統合ueditor入門
-
AngularJS がエラー $digest already in progress を報告する
-
[解決済み] AngularJs .$setPristineでフォームをリセットする
-
[解決済み] なぜAngularJSはselectに空のオプションを含めるのですか?
-
[解決済み] ng-repeat内のng-click関数にパラメータを追加しても、うまくいかないようです。