2016-04-03 8 views
2

テストのために、intern/leadfootを使用して複雑なページを記入する必要があります。ページの各部分は、必要な要素と入力データを受け取る別の機能によって気を配ります。いくつかの要素が検索された後のチェーン操作

サブ関数内のこれらの要素に対するアクションは、要素でありコマンドではないため、もはやチェーンできません。

操作を再度チェーンすることは何とかできますか? setContext()やカスタムコマンドを使って新しいコマンドを作成しようとしましたが、これまで成功していませんでした。

let inputs; 
return this.remote 
    .get('some/url') 
    .findAllByTagName('input') // Finds two input elements 
    .then(inputElements=> inputs = inputElements) 
    .then(()=> Promise.all([ 
     inputs[0].clearValue(), // I would like to be able to write: inputs[0].clearValue().type('a') 
     inputs[1].clearValue(), 
    ])) 
    .then(()=> Promise.all([ 
     inputs[0].type('a'), 
     inputs[1].type('b'), 
    ])) 
+0

あなたのコードのちょうど短い説明を提供するために役に立つかもしれませんコードを使用して、ソリューションを記述する別の方法を考えることができるかどうかを判断できるように、必要なアクションを決定します。 –

+0

@MatthewCliatt:ちょうど問題を掌握した、今問題はより包括的ですか? – Kiechlus

+0

私はまだあなたが何をしたいのか正確には分かりません。最後の2つのthen()関数をマージしますか?タグ名だけでなく、より具体的なセレクタを使用して、例題(find、clear、type、end()、find、clear、end end())に記述されているメソッドに従わない理由はありますか? – erikdstock

答えて

1

要素はコマンドと同じ方法の多くを共有しますが、それらは異なるAPIを持っています。主な違いは、アクションを表すCommandメソッドがコマンドを返すことです(コマンドは約束どおりで、アクションが終了すると解決されます)が、アクションを表すElementメソッドはElementを返さない(要素は約束的ではありません)。つまり、多くのElementメソッドを直接連結することはできません。あなたは、次のような何かを行うことができ、問題のような状況については、

:ユーザーがあなたを解析する必要がないように

function clearAndType(input, value) { 
    return remote.then(function (_, setContext) { 
      // setContext is always the last argument to a Command then() 
      // callback; the value returned by the previous Command is the 
      // first argument, which is ignored here 
      setContext(input); 
     }) 
     .clearValue() 
     .type(value); 
} 

var remote = this.remote; 

return this.remote 
    .get('some/url') 
    .findAllByTagName('input') 
    .then(function (inputs) { 
     return Promise.all([ 
      clearAndType(inputs[0], 'a'), 
      clearAndType(inputs[1], 'b'), 
      // ... 
     ]); 
    }) 
関連する問題