2016-12-12 9 views
2

私は現在、分度器でテストしようとしている簡単なフォームを持っています。基本的な入力タイプでうまくいくようですが、ngTagsInputの設定では機能しないようです。私は以下のエラーを引き起こさずにこれを設定する特別な方法があるのだろうかと思っていました。分度器:ngTagsInputでビルドされた要素をテストするには?

Failed: unknown error: cannot focus element 
(Session info: ...) 
(Driver info: ...) 
... 

現在のところ、私のフォームには4つの要素があります。名前(標準入力)、タイプ(ラジオボタン)、ターゲット(タグ入力)、および送信ボタン。 HTMLでは、このように表示されます。

​​

最後に、書いた1つの分度器のテストは、このようになります。

it('should submit a valid thing',function(){ 
    //Sets a name for the object 
    element(by.model('name')).sendKeys('user'); 

    //Sets a type for the object 
    element(by.id('t1')).click(); 

    /*Inputting tags (the functions below) seem to not work and throw an error*/ 

    //Clicks (or focuses on) the tag input box 
    element(by.model('targets')).click(); 

    //Types in the elements within it 
    element(by.model('targets')).sendKeys('target1'); 

    //Presses Enter to submit that particular target 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 

    //Repeat for more 
    element(by.model('targets')).sendKeys('target2'); 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 
    element(by.model('targets')).sendKeys('target3'); 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 
    element(by.id('submit')).click(); 
} 
+0

申し訳ありませんが、コピーして貼り付ける代わりに入力しました。しかし、はい、by.model()です。私は質問の詳細を修正しました。 – OliviaHarmon

+0

ありません。これは現在このページの唯一のものです。 – OliviaHarmon

+1

レンダリングされるHTMLを見て、それらの要素の1つに焦点を当てる必要があります。カスタム要素はフォーカスを受け取ることができません。 – MBielski

答えて

3

MBielskiのコメントのおかげで解決策を見つけることができました。レンダリングされるHTMLを見て、その要素の1つに焦点を当てる必要があることが判明しました。カスタム要素であるからです。 Google Chromeのデベロッパーツールを使用して、タグを構成する内部コードの一部を見つけることができました。要するに、次のように表示されます。

この内部要素にはるかに多くの情報がありますが、関連性を残しました。ですから、私が質問した質問で定義したタグ受信箱に情報を追加すると、このように "newTag.text"というモデルに焦点を当てるだけです。

it('should submit a valid thing',function(){ 
    //Sets a name for the object 
    element(by.model('name')).sendKeys('user'); 

    //Sets a type for the object 
    element(by.id('t1')).click(); 

    //Clicks (or focuses on) the tag input box // This may not be needed 
    element(by.model('newTag.text')).click(); 

    //Types in the elements within it 
    element(by.model('newTag.text')).sendKeys('target1'); 

    //Presses Enter to submit that particular target 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 

    //Repeat for more 
    element(by.model('newTag.text')).sendKeys('target2'); 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 
    element(by.model('newTag.text')).sendKeys('target3'); 
    browser.actions().sendKeys(protractor.Key.ENTER).perform(); 
    element(by.id('submit')).click(); 
} 

これは私の問題を解決しました。うまくいけば、他の人にとってもそうです。

関連する問題