2017-01-04 41 views
4

我們有一個具有登錄屏幕的Angular 1.5應用程序,應用程序代碼和我們的測試中都沒有更改。我們用量角器(與咕嚕,量角器等)
版本:不能讓量角器等待現有元素可點擊(condition.elementToBeClickable)

"dependencies": { 
    "async": "^0.9.0", 
    "chalk": "^1.1.1", 
    "fs-extra": "^0.24.0", 
    "grunt": "~0.4.5", 
    "grunt-contrib-jshint": "^0.10.0", 
    "grunt-protractor-runner": "^4.0.0", 
    "grunt-protractor-webdriver": "^0.2.5", 
    "jshint-stylish": "^1.0.0", 
    "load-grunt-tasks": "~3.1.0", 
    "lodash": "^2.4.1", 
    "log4js": "^0.6.21", 
    "protractor": "^4.0.11", 
    "selenium-webdriver": "^3.0.1" 
    } 

我們所有的測試都採用以下格式:

  • 登錄到應用程序和睡眠
  • 的測試(它)。它會從browser.sleep('1000'),然後(完成)promise(茉莉花語法)中得到done()函數。

    describe('login', function() { 
        browser.get('/'); 
        components.login.loginDefault(); 
        console.log('done login'); 
        browser.driver.manage().window().maximize(); // just in case the driver wont reach the '.add-new-type' button 
        browser.sleep(1000); 
    }); 
    
    describe('post login', function() { 
        it('just a test for after user loged in', function (done) { 
         console.log('post login'); 
         const ec = protractor.ExpectedConditions; 
         const getStarted = element(by.css('.add-new-type')); // just a button appears on the next page 
         console.log('getStarted ' + JSON.stringify(getStarted)); 
         browser.wait(ec.elementToBeClickable(getStarted), 5000); 
         console.log('post wait'); 
         browser.sleep(5000).then(done); 
        })}); 
    

我們並沒有改變依賴版本或沒有在我們的環境,突然沒有什麼作品,測試只有通過登錄階段,然後失敗沒有找到元素(我猜),並卡住,直到茉莉拋出超時異常

Session created: count=1, browserName=chrome, chromeOptions={args=[--no-sandbox, --test-type=browser, --disable-extensions], prefs={download={default_directory=./e2e/tmp, prompt_for_download=false}}} 
node path changed 
done login 
Started 
post login 
F 

在登錄後測試只是一個例子,我們嘗試過其他方法來使駕駛員旁邊等待等待「ExpectedConditions」。 如果我會尋找在控制檯調試器(鉻)的元素,我會得到正確的元素... 我們還試圖調試和REPL模式下打印

element(by.css('.add-new-type')).getText() 

和行爲是一樣的 - 沒有/沒有迴應

會有幫助!

回答

0

所以調查之後,我發現有問題的承諾,我們並沒有改變任何CSS在我們的應用程序,但我沒有使用$超時實現自動保存機制。 我認爲我們的內部超時莫名其妙地引起與量角器的超時衝突......指的是問題here(量角器的GitHub庫)

他們建議使用$區間,而不是超時 - 這實際上是解決了這個問題,但我不知道如果我想使用此解決方法。

0

我認爲這是因爲你的測試運行速度比瀏覽器可以加載你的元素快,看看這是否工作;

describe('post login', function() { 
it('just a test for after user loged in', function (done) { 
    console.log('post login'); 
    const ec = protractor.ExpectedConditions; 
    const getStarted = element(by.css('.add-new-type')); 

    browser.wait(ec.visibilityOf(getStarted), 5000); 

    console.log('getStarted ' + JSON.stringify(getStarted)); 
    browser.wait(ec.elementToBeClickable(getStarted), 5000); 
    console.log('post wait'); 
    browser.sleep(5000).then(done); 
})}); 

希望它有幫助!

+0

非常感謝您的回覆,不幸的是,這並沒有奏效,事情是那些測試之前完美運行,我們還懷疑測試不會等待頁面加載並且目前沒有找到方法得到它的工作 – lironn

+0

帽子沒有幫助,但謝謝,我學到了一些新的 – lironn

1

您是否嘗試過等待元素和網址?

'use strict'; 

var WaitUtils = function() { 

    this.waitElement = function (element , timeout) { 
     timeout = timeout || browser.params.time.long; 
     var expected = protractor.ExpectedConditions; 
     return browser.wait(expected.visibilityOf(element), timeout, "Element not found"); 
    }; 

    this.waitUrl = function (url, timeout) { 
     timeout = timeout || browser.params.time.long; 
     var expected = protractor.ExpectedConditions; 
     return browser.wait(expected.urlContains(url), timeout, "URL has not contains "+url); 
    }; 
}; 

module.exports = WaitUtils; 
+0

如果通過網址你的意思是路由,所以是的,但通過使用browser.sleep(1000);而不是browser.params.time.long,謝謝你,我會盡快結帳! – lironn

相關問題