【问题标题】:How can I check if an element is visible using Protractor?如何使用量角器检查元素是否可见?
【发布时间】:2014-08-09 01:02:37
【问题描述】:

我正在使用 Protractor 软件进行端到端测试。一些元素正在使用 ng-show 设置。

谁能告诉我如何使用 Protractor 检查这些元素是否可见?

【问题讨论】:

    标签: angularjs protractor


    【解决方案1】:

    假设您的元素的 ID 为“foo”,例如,您可以这样做

    expect($('#foo').isDisplayed()).toBe(true); // or false to test that it's hidden
    

    expect(element(by.id('foo')).isDisplayed()).toBe(true); 
    

    【讨论】:

    • 如果为假,如何将元素可见性变为真?
    • 量角器是一个网络浏览器。您将以编程方式执行最终用户将使用其浏览器执行的操作以使其可见。
    • 问题,按钮是可见的,但在这里没有执行点击是我的问题,我正在使用带量角器的 Appium,我最近认为在检查器中可见 = false,我有一个怀疑这是否是问题的根源? stackoverflow.com/questions/36871071/…
    【解决方案2】:

    我发现 isDisplayed() 返回一个 Promise,然后在 .then 中传递布尔值。所以看起来更像这样:

    $('#foo').isDisplayed().then(function(isDisplaying) {
        expect(isDisplaying).toBe(true);
      });
    

    【讨论】:

    • 是的,但是在这种情况下,expect 会自动解析promise,然后才进行实际的断言,所以这里不需要使用then()
    • 啊,所以它与期望它的暗示?那么在这种情况下我会期待什么呢?它会是什么样子?我不会处理从 .then 传回的布尔值。
    • 这对我有用,但是我不能在 expect 上使用 .toBe(true/false),它说它不是一个属性,但是 expect(!isDisplaying) 有效。
    【解决方案3】:

    期望知道处理承诺,所以以下工作。

    expect($('#foo').isDisplayed()).toBe(true);
    

    【讨论】:

      【解决方案4】:

      假设您有许多具有相同 id/class 的元素,并且您希望 assert 计算可见元素的数量

      var elements = element.all(by.id('foo'))
                     .filter(function(el){
                          return el.isDisplayed();
                      });
      
      expect(elements.count()).toEqual(2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 2011-02-08
        • 2023-03-04
        • 1970-01-01
        • 2018-10-04
        • 2012-07-08
        相关资源
        最近更新 更多