2016-08-18 9 views
1

ページオブジェクトのtroncatedコードは、コードが動作していることを分度器分度器()が働いているとget(0)ではない

にありますされています

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function(){ 
     return this.publishedShows.first(); 
    } 
}; 

これではありません。

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function(){ 
     return this.publishedShows.get(0); 
    } 
}; 

このエラーが発生します。 インデックスが範囲外です。インデックス:0の要素にアクセスしようとしていますが、ロケータby.repeaterに一致する要素は0個だけです( "show HomePage")

答えて

0

get(0)と対first()ではありません - 実装の点では全く同じです。それはそれで任意のアクションを行う前に、おそらくタイミングwait for the presence of the elementうとしている:

var elm = myPageObject.getFirstShow(); 
var EC = protractor.ExpectedConditions; 

browser.wait(EC.presenceOf(elm), 5000); 

// do smth with elm 
+0

多くのありがとうございます。しかし、試験を続行する前に、分度器がどんな角度の要素を待つことになっているのではないでしょうか? – mabehec

+0

@MathieuBergeron理論では、はい、実際には、テストでこれらの待機が必要な場合があります。ありがとう。 – alecxe

+0

私はこの解決策を試しても、まだ動作していません。同じエラー。他の考え? – mabehec

0

alecxeが存在する要素を待っているので、あなたが述べたように、待機またはブラウザにしたいことについてのポイントを持っています。 waitForAngular();

私が見たことは、ファインダを変数に解決すると、内部変数がクエリを解決したにもかかわらず、これが不完全な約束事の状態になる可能性があるということです。あなたのコードからそう

:何行われる必要があることは約束を解決するために、次にあなたが必要要素を取得することができるはずである

`this.publishedShows = element.all(by.repeater('show in showsHomePage'));` 

はまだ約束していないpublishedShowsなります。

私はあなたのコードを試したときにアイテムを返します(私はわずかに異なるリピーターを持っています)。

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function() { 
      return this.publishedShows.then(function(items){ 
       =>return items[0].getText(); 
      }); 
    } 
}; 

var hp = new HomePage(); 
=>expect(hp.getFirstShow()).toEqual('hello'); 

明らかにあなたがチェックしたいものとあなたの期待も変更してください。 =>

また、トラックごとのステートメントを使用する場合は、リピータ部分のみに正確に一致するように、コマンドでコマンドを調べる必要があります。 これは私のために働いた、解決された約束はファインダーの配列を返すことに注意してください。

関連する問題