用量角器测试悬停状态的变化

时间:2015-06-06 00:03:44

标签: javascript selenium selenium-webdriver protractor end-to-end

无论我做什么,我都无法通过量角器测试获得悬停状态。以下代码是半功能的。

  • 适用于Firefox
  • 仅当我使用Chrome滚动区域进入视图时才有效。
  • Phantom 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);
          });
      });

2 个答案:

答案 0 :(得分:4)

我们最近遇到过类似的事情。

帮助我们使用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进行Protractor测试。   有许多报道的PhantomJS崩溃和行为问题   与真正的浏览器不同。

除此之外,请参阅:

在这里,我试图达到这一点,你应该牺牲幻影JS中的"失败"参数。

答案 1 :(得分: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')))并将其修改为您的代码