2016-03-27 6 views
2

私の角型アプリケーションでは、分度器を使用してアプリケーションのオートメーションテストスイートを作成していますが、スピナーをテストする方法に問題がありました。 私は、スピナーを扱うための再利用可能な関数をいくつか作成しようとしましたが、うまく動作するように見えますが、スピナーがポップアップウィンドウにあるときにエラーが発生しました: "...失敗:古い要素参照:要素がページ文書ポップアップウィンドウを閉じた後、ポップアップでDOMからスピンナーが削除されたため、分かりやすい要素を見つけることができませんでした。 私の関数では、この分度器のメソッドを使用しようとしました: browser.wait(EC.invisibilityOf($( '#abc'))、5000); browser.wait(spinner.isDisplayed()、5000); 私は、理由がわかったので、browser.waitがループ内でループしているか、タイムアウトが発生するまで条件内を実行していますが、修正するにはわかりません。プレゼントのための追加チェックして助けてください...ポップアップウィンドウで分度器を使用してスピナーをテストする

私の欲望機能: this.selector - 親要素(ボタン)

waitBtnSpinner() { 
    let spinner = this.selector.element(by.css('.btn-spinner')); 
    spinner.isPresent().then((isPresent) => { 
     if(isPresent) { 
     spinner.isDisplayed().then((isDisplayed) => { 
      return browser.wait(this.EC.invisibilityOf(spinner), 10000); 
     }) 
     } else { 
     return isPresent; 
     } 
    }); 
    }; 

答えて

0

より信頼性の高い方法は、ゼロを返すために、単一のセレクターを待つだろう目に見えるスピナー。 そして、障害が発生した場合には適切なメッセージングを提供するために、私は「条件」を実装します:あなたはCSSのロケータを更新する必要が

var By = webdriver.By; 
var EC = webdriver.until; 

// define a condition that is true when the locator doesn't match any element 
EC.noElement = function (locator, message) { 
    return new EC.Condition(message + ' ' + locator, function(driver) { 
    return driver.findElements(locator).then(function(elements) { 
     return elements.length === 0; 
    }); 
    }); 
}; 

// define a condition that is true when there is no visible spinner 
EC.noSpinner = EC.noElement(By.css('.spinner[ng-sow]'), 'for no visible spinner'); 


// usage to wait for no visible spinner 
driver.wait(EC.noSpinner, 10000); 

注意「.spinnerの[ngの-SOW]を」ロケータが一致するとあなたのページに表示されるスピナー。

+0

私は完璧に働くために、多くの助けをたくさん... – Den

0

これを試してください。

element.all(by.model('model of the Spinner')).each(function (eachElement, index) 
{ 
     eachElement.click(); 
     browser.driver.sleep(500); 
     element(by.css('Unique Selector of the Spinner value')).click(); 
     browser.driver.sleep(500); 
}); 

これが役に立ちます。 :)

関連する問題