2016-06-08 123 views
2

所有使用量角器和黃瓜的角度e2e測試在我的機器上運行平穩順利。但只要我運行生成服務器上的測試中,我得到一個錯誤構建服務器上的量角器失敗 - ElementNotVisibleError

ElementNotVisibleError: element not visible

Session info: chrome=51.0.2704.84

Driver info: chromedriver=2.21.371459

platform=Windows NT 6.1 SP1 x86_64

在開始的時候,我認爲這事做具有定時,正在發生一些異步的東西,但調試我小時後甚至可以在我的本地機器上重現該錯誤。

最小化窗口是不夠的,但如果我快速拖動鼠標使窗口儘可能小,我得到這個錯誤。所以這只是「窗口大小」的問題。

Thus the error message is quite ok, but how are protractor meant to run on a build server?

爲什麼有些測試通過?量角器似乎「看」到構建服務器上的東西,從而

我試圖

browser.driver.manage().window().maximize(); 

我試圖

browser.manage().window().setSize(1920, 1200); 

,我試圖改變我的代碼的建議here,我嘗試了很多更多(絕望)事物。沒有工作。

現在我的一個大問題:如何在構建服務器上以穩定的方式運行量角器測試(在我的情況下爲TFS)何時有最右邊的按鈕我想單擊某個頁面?

短代碼示例:

browser.get(browser.baseUrl + '#/somePage').then... 
element(by.id(buttonId)).click(); 

謝謝!

UPDATE:

我的問題的主要原因是事實,屏幕分辨率在運行生成服務器上測試了寬度爲1024,因此的setSize(1920,1200)失敗。出於這個原因,我現在加入了onPrepare功能目前resoltuion的輸出,所以,我將在未來得到一個提示:

onPrepare: function() { 
     browser.executeScript('return { height: screen.availHeight, width: screen.availWidth, top: screen.availTop, left: screen.availLeft};').then(function (result) { 
      console.log("Screen resolution: "); 
      console.log(result); 
     }); 

     browser.manage().window().setSize(1920, 1200); 

當然,這可以延長一點點地拋出一個異常或東西喜歡這個。

+0

快速檢查。你確定'buttonId'是唯一的嗎?..在輸出中會出現什麼情況:'element.all(by.id(「buttonId」))。count()。then(function(count){console.log(count);});'。? – alecxe

+0

嗨@alecxe,非常感謝您的幫助。輸出是1. – timtos

+0

好吧,你確定這不是一個時間問題?你有沒有嘗試過'browser.wait(EC.elementToBeClickable(element(by.id(buttonId))),5000);'哪裏'var EC = protractor.ExpectedConditions;'在點擊按鈕之前? – alecxe

回答

3

有時,我們需要將所需元素放入視圖以避免「元素不可見」錯誤。我們可以做的是,在兩種常規方法:

  • 使用"browser actions"

    var elm = element(by.id("buttonid")); 
    browser.actions().mouseMove(elm).click().perform() 
    
  • scroll into view

    var elm = element(by.id("buttonid")); 
    browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement()); 
    

而且連接this answer擁有一套漂亮的東西你可以嘗試解決這個問題。

+0

嘿傢伙。非常感謝您的提示。我的構建服務器的分辨率只有1024x768,所以我的元素永遠不可見。我已經使用了alecxe的'scrollIntoView()'方法來解決這個問題。 – Ben

相關問題