2015-12-02 97 views
1

所以我有一個程序,將用戶添加到數據庫。當點擊添加用戶時,它會調用角度自定義指令,將HTML呈現給頁面。在量角器中,我試圖編寫一個測試,通過查找和填寫必填字段來添加用戶。訪問量角器JS中的Angular JS指令內的元素

到目前爲止,這個工程:

it('should click the add user button', function(){ 
    browser.waitForAngular(); 
    var addUser = element(by.id('addUserDesktop')); 
    browser.wait(EC.elementToBeClickable(addUser), 10000); 
    addUser.click().then(function(){ 
     setTimeout(function(){ 
      expect(element(by.id('useradd')).isPresent()).toBe(true); 
     },2000); 
    }); 
}); 

我已經把setTimeout的在它認爲的元素可能無法加載速度不夠快量角器。

在此之後經過我有這樣的測試:

it('should find and enter data into the required fields to add a user', function(){ 
    browser.driver.findElement(by.id('username')).sendKeys(username); 
}); 

但後來我得到這個錯誤:

ElementNotVisibleError: element not visible

任何人有任何想法如何解決這個問題一直在嘗試了一小而這只是讓我的頭部遭到破壞!

回答

0

protractor中,有一個內置的機制來等待頁面上的特定條件。在與browser.wait()使用這種情況下visibilityOf Expected Condition應該解決的問題:

var EC = protractor.ExpectedConditions; 

addUser.click().then(function() { 
    browser.wait(EC.visbilityOf(element(by.id('useradd'))), 5000); 
}); 
0

是否有可能有多個元素在這個頁面的HTML「.username」?當你的測試看到它時,請手動在頁面的html中找到它,並找出答案。你也可以嘗試這樣的:

var usernames = $$('.username'); 
expect(usernames.get(0).isDisplayed()).toBeTruthy('First username element not displayed'); 

只要通過每個元素,直到你找到一個實際上可見的。

否則,我在等待可能會有幫助,因爲@alecxe指出。

0

找到了,因爲該指令加載另一個html文件我不得不等待指令被添加。然後在其中指定元素。所以「目標」必須是外部/內部。

var directive = element(by.id('useradd')); 
    directive.element(by.model('user.username')).sendKeys(username); 

此外部內部定位確保我只處理指令中的字段。