2016-02-09 52 views
1

我有這樣的代碼:其中的選項是通過對服務器的調用加載量角器如何等待選項

 element(by.model("roleSelection.role")).element(by.cssContainingText('option', newRole)).click();//.then(function() {console.log('role click')})//; 

我可以做這個

browser.wait(function() { 
return browser.isElementPresent(by.model("roleSelection.role")).then(function(present){ 
    return present; 
});}, 8000); 

等待第一個元素,它似乎工作。但我怎麼才能等到「子元素」是可點擊的。 我已經試過這

browser.wait(function() { 
return browser.isElementPresent(by.model("roleSelection.role")).then(function(present){ 
    if (present) { 
     var elm = element(by.model("roleSelection.role")); 
     return elm.isElementPresent(by.cssContainingText('option', newRole)).then(function(subpresent) { 
      return subpresent; 
     }); 
    } 
}); }, 8000); 

回答

0

你試過點擊嗎?沿着這些線

var EC = protractor.ExpectedConditions; 
var select = element(by.model("roleSelection.role")) 
var isClickable = EC.elementToBeClickable(select); 
browser.wait(isClickable,5000); //now options should have been loaded by now 
+0

這似乎已經解決了它(大部分時間無論如何)。非常感謝。 – TheBurnMill

+0

很高興它爲你工作 – nilesh

0

好了,試試這個:https://angular.github.io/protractor/#/api?view=ExpectedConditions.prototype.elementToBeClickable

但是,請記住,量角器是適合的角度網頁和交互,和動畫。例如ng-animate。所以,它不一定能夠用於例如jquery或其他動畫。

這樣:

onPrepare: function() { 
    // disable animations when testing to speed things up 
    var disableNgAnimate = function() { 
     angular.module('disableNgAnimate', []).run(function ($animate) { 
     $animate.enabled(false); 
     }); 
    }; 
    browser.addMockModule('disableNgAnimate', disableNgAnimate); 
    } 

也可以在腳本方式browser.executeScript()切換。 請參閱此link。它僅適用於jquery動畫。

如果您沒有動畫問題。使用setTimeout() JS功能。

+0

頁面是有角度的,但與手動bootstapping。此頁面在登錄後,然後我選擇角色。之後頁面提取「部門」進行選擇。現在當這個被提取時,我選擇「部門」。 – TheBurnMill

+0

我試過預期的條件,但它沒有工作,甚至沒有上面的工作簡單的版本。消息是像「無法綁定」的東西。 – TheBurnMill