11

無論我做什麼,我都無法使用量角器測試獲得懸停狀態功能。下面的代碼是半功能..使用量角器測試懸停狀態更改

  • 在Firefox
  • 運作良好,只有當我滾動區域進入視野與Chrome工作。
  • 未能在幻影JS

obj 
    .getCssValue('color') 
    .then(function (color1) { 
    browser 
     .actions() 
     .mouseMove(obj) 
     .perform() 
     .then(function() { 
     obj 
      .getCssValue('color') 
      .then(function (color2) { 
      expect(color1) 
       .not 
       .toEqual(color2); 
      }); 
     }); 

回答

1

解決方案1:

只使用一個簡單的懸停功能爲對象

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<p onmouseover="colorin(this)" onmouseout="colorout(this)"> 
 
Testing colorin and colorout function for mouse hover 
 
</p> 
 

 

 
<script> 
 
function colorout(x) { 
 
    x.style.color = "#000000"; 
 
} 
 

 
function colorin(x) { 
 
    x.style.color = "#7FAF00"; 
 
} 
 
</script> 
 

 
</body> 
 
</html>

可能的解決方案2:

嘗試此版本waitForAngular();您可能需要等待角:

obj 
    .getCssValue('color') 
    .then(function (color1) { 
    browser.waitForAngular(); 
    browser 
     .actions() 
     .mouseMove(obj) 
     .perform() 
     .then(function() { 
     obj 
      .getCssValue('color') 
      .then(function (color2) { 
      expect(color1) 
       .not 
       .toEqual(color2); 
      }); 
     }); 

可能的解決方案3:

更換.mouseMove(obj).mouseMove(browser.findElement(protractor.B.id('foo')))並使其適應你的代碼

+0

此頁面沒有使用任何角度 –

+0

好的......您可以使用第一個解決方案或將'.onmouseover'和'.onmouseout'集成到您當前的函數中,而不是'.mouseMove' ......任何方式這個問題似乎是量角器知道https://github.com/angular/protractor/issues/159 – intika

+0

沒錯,但這將需要JS做一切CSS,這是一個非起動器 –

3

我們已經遇到過類似的事情最近。

什麼幫助我們是等因素,以使用browser.wait()特定CSS值:

function waitForCssValue (elementFinder, cssProperty, cssValue) { 
    return function() { 
     return elementFinder.getCssValue(cssProperty).then(function (actualValue) { 
      return actualValue === cssValue; 
     }); 
    }; 
}; 

用法:

browser.wait(waitForCssValue(obj, 'color', color2), 5000); 

在這裏,我們基本上在等待可達5秒對於CSS color的值等於color2。在懸停元素後立即應用等待調用。


而且,我記得具有滾動進入視野有助於對SO解決類似的問題:

browser.executeScript("arguments[0].scrollIntoView();", obj); 

最大化瀏覽器窗口,也可以幫助,我們通常做在onPrepare()

onPrepare: function() { 
    browser.driver.manage().window().maximize(); 
}, 

附加說明有關PhantomJS

所有的

首先,量角器開發商建議對運行protrator終端到終端的測試與PhantomJS

注意:建議不要使用PhantomJS用量角器測試。 PhantomJS崩潰和行爲 有許多與真實瀏覽器不同的報告問題。

除此之外,請參閱:

在這裏,我試圖讓的地步,你應該犧牲 「在幻影JS失敗」 的說法。

+0

我試過'瀏覽器.executeScript',但它不起作用;任何關於它的技巧? –

+0

@KirkStrobeck謝謝你試用它!什麼是症狀,你是否看到這個元素越來越集中並在瀏覽器中徘徊?任何錯誤?你嘗試過「等待」方法嗎? – alecxe