You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Protractor中检查对象/数组是否包含指定字符串?

Protractor断言失败:处理getAttribute('style')返回数组的问题

嘿,我一眼就看出问题所在了——你的dialog.getAttribute('style')返回的不是普通字符串,而是一个包含单个字符串元素的数组!看报错里的[ 'display: none; width: 400px;' ]就能明白,直接用toContain会去检查整个数组是否包含子串,这显然不匹配。

你之前调用toString()没用,是因为你直接在getAttribute返回的Promise对象上调用了这个方法(Protractor的大部分API都返回Promise),所以才得到了[object Object],而不是等待Promise解析后对实际的数组调用toString。

给你几个靠谱的解决方案:

方案1:直接取数组的第一个元素

既然返回的是数组,直接提取索引0的元素就行,简单粗暴:

expect(dialog.getAttribute('style')[0]).toContain('display: none');

方案2:用getCssValue精准检查属性

其实要验证元素是否隐藏,完全不用去解析整个style字符串,用getCssValue直接获取display属性的值更靠谱:

expect(dialog.getCssValue('display')).toEqual('none');

这个方法能直接拿到CSS属性的计算值,避免了style字符串格式变化带来的意外问题,是最优解。

方案3:正确处理Promise和数组

如果一定要处理这个数组,你可以用then链式调用,或者用async/await来等待Promise解析后再处理:

用then的写法:

dialog.getAttribute('style').then(function(styleContent) {
  // styleContent是解析后的数组,转成字符串再检查
  expect(styleContent.join('')).toContain('display: none');
});

用async/await的写法(更简洁):

it('should verify dialog is hidden', async () => {
  const styleArr = await dialog.getAttribute('style');
  expect(styleArr.join('')).toContain('display: none');
  
  // 或者结合方案2的最优写法
  const displayValue = await dialog.getCssValue('display');
  expect(displayValue).toEqual('none');
});

内容的提问来源于stack exchange,提问作者matandked

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:59:18