2016-09-16 25 views
3

私はangle2で分度器を使い始めました。私は以下の分度器でサンプルテストを書いた角度2のフォームコントロールで分度器を使用するには?

<input type="text" id="name"> 


describe('angularjs homepage', function() { 
it('should say my name', function() { 
    browser.get('http://localhost:3000/?'); 
var greeting =element(by.id('name')).sendKeys('john'); 
expect(greeting.getAttribute('value')).toEqual('john'); 
}); 
}); 

これはうまくいきました。しかし、私は、フォームにこの

<input type="text" [formControl]="testControl" /> 

のようなものを使用していると私は私がId's or namesに言及したくないので、入力に言及した任意のidは、var greeting=element(by.formcontrol('testControl')).sendKeys('john'); のようなものをコントロール名を使用してテストを書くことができることをcontrol.Is持っていけません入力のために。 あなたは私を助けてくれますか?私が間違っているなら私を訂正してください。ありがとう

答えて

1

入力を見つけるためにCSSセレクターを試してみることができますか?以下の例を見てください。

element(by.css("input[formControl='testControl']")) 
+0

これは私にとって良いものであるように思わ... –

+0

こんにちは...私が得たこのエラー "ありがとう失敗:ロケータを使用して要素が見つかりませんでした:By(css selector、input [formControl = "name"]) "。 –

+0

入力がレンダリングされた後、formControl属性を持たない – karser

1

これは、分度器が要素が表示される前に、browser.get()の直後に要素を探している可能性があります。 CSS/XPathのセレクタは通常動作するので、これを試してみてください。これがさらに進む前に、ページ上の(タイムアウト付き)特定の要素の可視性を待つために分度器を強制します

describe('angularjs homepage', function() { 
it('should say my name', function() { 
    browser.get('http://localhost:3000/?'); 
var EC= protractor.ExpectedConditions; 
browser.wait(EC.visibilityOf($('yourElementHere'), 60000); 
var greeting =element(by.id('name')).sendKeys('john'); 
expect(greeting.getAttribute('value')).toEqual('john'); 
}); 
}); 

1

また、これに問題があり、受け入れられた回答が機能しています。 私は次のようにユーティリティメソッドを作成することになった:

const input = (name: string) => element(by.css('input[ng-reflect-name=\"' + name + '\"]')); 

使用法:

input('firstName').sendKeys('John'); 
関連する問題