2016-04-15 6 views
0

私のユースケースはこれによって異なりますが、一般的には要素の束を集めて、それぞれに_.map()を適用しようとしています。問題は、このシリーズの.getAttribute()コールが、ローカルで動作するテストを引き起こし、ソース/アンドロイドのようなリモートサーバーに対して失敗する可能性があることです。Leadfoot +ソース:getAttrを使用した要素のコレクションのマッピングはモバイルでのみ失敗します

1つの例:ページ上にすべて<div class='article'><a href='articles/{id}'>を収集して、その後、hrefを取得する。このようなものに見えるかもしれません。このアプローチは、モバイル(アンドロイド)ソース環境でテストするまで機能します。私はタイムアウトを取得します。

これは私のアンドロイド環境の機能に関連する問題ですか?たくさんのリクエストを重ねるには? 75件の記事から45件までのテストをスケールダウンしてみました。タイムアウトを60に引き上げましたが、モバイルテストは失敗します。ローカルではクロムドライブが問題なく、クロムデスクトップ+ソースは問題ありません。

なく、私の実際のテストが、コードの近似は私が話している:

/// ... return this.remote 
.findAllByTagName('div.article a') 
    .then(function (articles) { 
     var promises = articles.map(function(article) { 
     return article.getAttribute('href'); 
     }); 
     Promise.all(promises) 
     .then(function (hrefs) { 
     uniques = _.uniq(hrefs); 
     assert(hrefs.length === uniques.length); 
     }); 
    }); 
+0

どのようなエラーが表示されますか? – jason0x43

+0

もっと一般的なJavaScriptクライアントで試してみてください。 "Leadfootはブラウザを非常に速く動かす" –

+0

@ jason0x43 - 私が得ているエラーはちょうど「Linuxでアンドロイド4.4でタイムアウトに達しました - 無限スクロールは3回働いています」これは最も最近の彼らのコンフィギュレータで提供されているアンドロイドビルドソースは、アンドロイドエミュレータで実行されています。私は別のオプションは、アンドロイドエミュレータを避けるために、単に携帯電話の寸法/機能とクロム/サファリを使用することでしょうか? – erikdstock

答えて

1

あなたはタイムアウトエラーを見ているので、私はテストが合格するまでテストのタイムアウトを増加し続けてお勧めしたいです。 Sauce上のモバイルテスト環境は、デスクトップ環境よりも初期化が遅く、動作が遅くなるため、多くのリクエストを含むテストは非常に遅い可能性があります。 articles素子アレイが実行ブロックに引数として渡され、上記のスニペットで

.then(function (articles) { 
    return this.parent.execute(function (articles) { 
     return articles.map(function (node) { 
      return node.getAttribute('href'); 
     }); 
    }, [ articles ]); 
}) 

:物事をスピードアップする

一つの方法は次のように、参照を収集するためにexecuteブロックを使用することです。リモートWebDriverは、要素参照をexecuteコードで操作できる実際のDOM要素に逆シリアル化します。これは、リモートブラウザに対して1回の要求だけが行われるため、各要素に対して個別の要求を使用するよりもはるかに効率的です。

+0

ありがとう!これはすべてを完全に説明します。 – erikdstock

+0

これは、実際にはモバイル[selendroid]環境で 'execute'を使っては機能しません。具体的には、私はSelendroidの例外を取得しています "オブジェクト[オブジェクトHTMLAnchorElement]にはメソッド 'マップ'がありません。 chromedriverを使用してローカルで細かく動作し、クロムブラウザを使用してリモートで動作します。 – erikdstock

+0

Odd。 'articles'引数がselendroid上の単一の要素として終わるように思えます。したがって、正確に同じテストコードは、Selendroidとchromedriverの動作が異なりますか? – jason0x43

関連する問題