如何使用Protractor检查元素是否可见?

10

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

请问有人能告诉我如何使用Protractor检查这些元素是否可见吗?

4个回答

14
假设您的元素具有ID“foo”,您可以这样做,例如:
expect($('#foo').isDisplayed()).toBe(true); // or false to test that it's hidden
或者
expect(element(by.id('foo')).isDisplayed()).toBe(true); 

如果它是假的,我们如何将元素可见性变为真? - Emna Ayadi
Protractor是一个Web浏览器。您可以通过编程方式执行与最终用户使用浏览器相同的操作,以使其可见。 - JB Nizet
问题在于按钮可见但无法点击,我的问题是,我正在使用带有 Protractor 的 Appium,并且最近发现在检查器中 visible = false,我怀疑这是否是问题的根源?https://dev59.com/uJbfa4cB1Zd3GeqPuHmB - Emna Ayadi

2

我发现isDisplayed()返回一个promise,在.then中你会得到一个布尔值。所以代码看起来更像这样:

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

1
没错,但在这种情况下,expect会自动解析Promise,然后才进行实际的断言,因此这里不需要使用then() - finspin
啊,所以它是带有期望的隐含意义吗?那么在这种情况下我应该期望什么?它会是什么样子?我将无法掌握从 .then 返回的布尔值。 - Matt Goo
这个对我有用,但是我不能在 expect 上使用 .toBe(true/false),它说它不是一个属性,不过 expect(!isDisplaying) 是可以工作的。 - ConorJohn

1
假设您有许多具有相同id/class的元素,并且您想要对可见元素的数量进行assert
var elements = element.all(by.id('foo'))
               .filter(function(el){
                    return el.isDisplayed();
                });

expect(elements.count()).toEqual(2);

1
expect知道如何处理Promise,因此以下代码可以正常工作。
expect($('#foo').isDisplayed()).toBe(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接