css – 测试链接样式更改

前端之家收集整理的这篇文章主要介绍了css – 测试链接样式更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我们的一个测试中,我们正在测试鼠标悬停后的链接(元素)样式更改.

默认情况下,链接具有黑色字体而没有装饰,但鼠标上方的字体变为蓝色,链接文本变为下划线.以下是相关测试:

it("should change font style on mouse over",function () {
    expect(scope.page.forgotPassword.getCssValue("color")).toEqual("rgba(11,51,60,1)");
    expect(scope.page.forgotPassword.getCssValue("text-decoration")).toEqual("none");

    browser.actions().mouseMove(scope.page.forgotPassword).perform();

    expect(scope.page.forgotPassword.getCssValue("color")).toEqual("rgba(42,100,150,1)");
    expect(scope.page.forgotPassword.getCssValue("text-decoration")).toEqual("underline");
});

问题是,在大约十分之一的运行中,它失败并出现以下错误消息:

Expected ‘rgba(11,1)’ to equal ‘rgba(42,1)’.

Expected ‘none’ to equal ‘underline’.

我怀疑它在实际更改之前会读取css样式.

我该怎么做才能使测试更可靠,更稳定?将不胜感激.

解决方法

CSS更新中的这种异步似乎是量角器/ webdriver应该能够等待的东西.你的应用程序在悬停时实现CSS更新有什么不寻常之处吗?是以某种方式指定动画或更新延迟?

也就是说,我认为有时候量角器不能知道更新可能需要一些时间,所以我认为你可以用不同的方法编写测试.而不是期望价值成为你想要的(并且与浏览器中的变化竞争),你能否重新将测试称为“等到价值 – 我想要显示”? (失败的情况稍微慢一些,但很有希望,但很少见.)

检查文本修饰是否变为“下划线”似乎更简单(并且可能两者都会立即改变,所以你只需要等待一个,然后再检查另一个?)

删除

expect(scope.page.forgotPassword.getCssValue("text-decoration")).toEqual("underline");

并使用类似这个未经测试的代码

browser.wait(function() { 
 return scope.page.forgotPassword.getCssValue("text-decoration")).then(function(value) {
   return value === 'underline';
 });

(或者使用Expected Conditions基础设施吗?)

你应该能够隐藏一些功能中的丑陋:

function waitForValue(valPromise,expectedVal) {
   return browser.wait(function() {
      return valPromise.then(function(value) {
         return value === expectedValue;
      });
   });
}

// Now your test can contain:
waitForValue(scope.page.forgotPassword.getCssValue("text-decoration"),'underline');

猜你在找的CSS相关文章