2016-10-27 10 views
1

私は招待状のリストを持っていて、あるトリガの後に最初の保留中のものが受け入れられているかどうかを確認します。分度器:ロケータの結果が変更された場合、変数に格納されている要素が変更されています

<div class="invitation"> 
    <h1>A</h1> 
    <div class="PENDING">PENDING</div> 
</div> 
<div class="invitation"> 
    <h1>B</h1> 
    <div class="PENDING">PENDING</div> 
</div> 

<div class="invitation"> 
    <h1>A</h1> 
    <div class="ACCEPTED">ACCEPTED</div> 
</div> 
<div class="invitation"> 
    <h1>B</h1> 
    <div class="PENDING">PENDING</div> 
</div> 

しかし、私はそれを今の招待をログインした場合を受け入れた状態にH1との最初の保留招待を保存するための仕様の内部にいくつかのコードここ

// get first element with css .PENDING 
let pendingTxt = element.all(by.css('.PENDING')).get(0); 

// get its parent : div.invitation with h1 A 
let invitation = pendingTxt.element(by.xpath('ancestor::div')) 

いくつかのスクリプトの更新の招待状h1 Bで招待状を返します。

これは、招待状がpendingTextロケータに従って更新されたことを意味します。私はなぜそれを理解するか分からない。

しかし、元の招待状を正しく保存する方法が見つかりません。私はそれを成功させずに複製しようとしました。

答えて

1

変数pendingTxtは、解決するたびに要素を見つけるElementFinderのPromiseを保持します。要素を配置するメカニズムによって要素を格納していません。

ので、要素を格納するために、あなたが最初WebElementに約束を解決する必要があります。

protractor.promise.fulfilled(element.all(by.css('.PENDING')).get(0)) 
    .then(status => { 

    expect(status.getText()).toEqual('PENDING'); 

    // accept the invitation 

    expect(status.getText()).toEqual('ACCEPTED'); 

    }) 

またはWeb要素のリストに:私は理解して

element.all(by.css('.PENDING')).then(statuses => { 

    expect(statuses[0].getText()).toEqual('PENDING'); 

    // accept the invitation 

    expect(statuses[0].getText()).toEqual('ACCEPTED'); 

}) 
+0

おかげで、私はより多くを学ぶ必要があります約約束。しかし、私は少し混乱しています。 http://www.protractort.org/#/api?view=ElementArrayFinder.prototype.getという文書を見ると、get(index)の直後にgetText()にアクセスします。そしてあなたのコードを試して、私は次のエラーがあります:element.all(...)。get(...)。次に関数ではありません。 – sebap

+0

私のAPIが「ElementFinder」を解決するための直接的な方法を提供していないことは間違いです。固定アップデートを参照してください。 –

+0

メルティ、それは今働いている。 – sebap

関連する問題