无论我做什么,我都无法通过量角器测试获得悬停状态。以下代码是半功能的。
obj
.getCssValue('color')
.then(function (color1) {
browser
.actions()
.mouseMove(obj)
.perform()
.then(function () {
obj
.getCssValue('color')
.then(function (color2) {
expect(color1)
.not
.toEqual(color2);
});
});
答案 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')))
并将其修改为您的代码