2016-04-12 8 views
1

現在、私が使用しています:EC.elementToBeClickable()と.first()を組み合わせて最初の要素を返すにはどうすればよいですか?

browser.wait(EC.elementToBeClickable($('div[ng-model="loginInput"]')), 5000)); 

しかし、これは複数の要素を返します。この場合パスが長くなるので、乱雑なxpathやcssセレクタを使いたくないです。

マイbrowser.wait条件作品、しかし、コンソールに戻ります:

WARNING - more than one element found for locator By.cssSelector("div[ng-model=\"loginInput\"]") - the first result will be used 
WARNING - more than one element found for locator By.cssSelector("div[ng-model=\"loginInput\"]") - the first result will be used 

私はelementToBeClickableに.ALLと1次回()を使用することができますか()?

答えて

1

1つのオプションは、first()を使用して、ロケータに一致する最初の要素を取得するには、次のようになります。

var elm = $$('div[ng-model="loginInput"]').first(); 
browser.wait(EC.elementToBeClickable(elm), 5000)); 

もう、あなたがクリック可能であることを、すべての要素を待ちたい場合、あなたはカスタム期待条件を組み合わせて作ります個別elementToBeClickableを使用して、EC.andおよびreduce()(試験されていない):

var allElementsToBeClickable = function(elements) { 
    return elements.all().reduce(function(acc, elm) { 
     return EC.and(acc, EC.elementToBeClickable(elm)); 
    }, function() {}); 
}; 

var elements = $$('div[ng-model="loginInput"]'); 
browser.wait(allElementsToBeClickable(elements), 5000)); 
0

element.all(by.css( '。xyz'))。get(0);を使用して、使用する配列内の各要素を取得します。

関連する問題