如何使用量角器查找元素是否可见

How to find whether an element is Visible or not using protractor

在页面上需要检查元素是否可见。

元素HTML代码如下:

    <li ng-class="{active: (subview == 'add')}" ng-show="iSU || dp.ua" class="ng-hide">
      <a href="#/setup/users/all/add/" lid="users-submenu-create-user-tab" class="ng-binding">
        Create user
      </a>
   </li>

我需要检查元素 'Create user' 是否可见。如果一个元素被隐藏,那么父元素 class 将是“ng-hide”。

我尝试了很多方法来检查元素,但都没有成功。

//'lid'有一个自定义方法,我们用它来识别元素。

期望(util.isCreateUserTabDisplayed()).toBe(假);

解决方案一: “isCreateUserTabDisplayed()”的定义

this.isCreateUserTabDisplayed = function()
    {
       var createUserTab = elmenet(by.lid("users-submenu-create-user-tab"));
        return createUserTab.isPresent()
    }

isPresent() 返回“true”,因为元素存在于 DOM.

方案二:

想到通过isDisplayed()函数进行Verify

this.isCreateUserTabDisplayed = function()
        {
           var createUserTab = elmenet(by.lid("users-submenu-create-user-tab")).getWebElement();
           var createUserParentEle = createUserTab.getDriver();
            createUserParentEle.isDisplayed().then(function(result){
               return result;
            });
        }

收到错误“createUserParentEle.isDisplayed”不是函数

方案三: 想通过获取父元素 class 变量来验证并验证它应该是 'ng-hide'

this.isCreateUserTabDisplayed = function()
    {
               var createUserTab = elmenet(by.lid("users-submenu-create-user-tab")).getWebElement();
               var createUserParentEle = createUserTab.getDriver();
              return createUserParentEle.getAttribute('class').then(function(attrValue){
                       if( attrValue  == 'ng-hide')
                          return false
                       else
                          return true;
                  });
     }

收到错误“createUserParentEle.getAttribute”不是函数

请任何人帮忙。

我注意到 Whosebug 上出现了很多关于量角器的问题,因为用户倾向于将事情复杂化,而解决方案可能相当简单

我强烈建议始终先从量角器文档开始,它包含您需要的一切示例

在你的情况下 isDisplayed() 就是你要找的

this.isCreateUserTabDisplayed = function() {
  var createUserTab = elmenet(by.lid("users-submenu-create-user-tab"));
  return createUserTab.isDisplayed()
}

// and use like this
expect(await this.isCreateUserTabDisplayed()).toBe(true);

// or if you don't know how to use await/async, which I recommend to learn too
this.isCreateUserTabDisplayed().then(function(result){
   expect(result).toBe(true);
})