如何使用 jasmine expect(check).toContain(value) 验证带有空格的动态值



我想验证一个值,它是动态的,从一个页面检索到另一个页面。该元素上也有空间。以下是我的编码。

页 - 1

var PerAge = element(by.css("h1 > span.ng-binding")).getText(); 

这个元素上有空间,像这样 ->  name

第 2 页 ->其他页面中显示的相同值。此元素上没有空间。

var HumAge = element(by.repeater("slide in ctrl.slides track by $index")).getText();

现在,我想验证第 2 页上的值是否相同。由于,中继器有一堆其他值,所以我使用 .toContains 来验证该值。这里的问题是,PerAge上有空间。

我检查了这个堆栈溢出问题,但它不起作用。在茉莉花中,">"应等于">"。

expect(PerAge).toContain(HumAge);

它返回以下错误

预计"Shane

"将包含"Shane"。

我试了trim,它无法识别修剪。我不能使用下面这样的.ToEqual因为该元素还有很多其他东西。

expect(PerAge).toEqual('xA0HumAge')

如果我理解正确,您可以在第 1 页上检索一个值,如下所示:

var PerAge = element(by.css("h1 > span.ng-binding")).getText(); 

并在第 2 页上使用它来比较它:

var HumAge = element(by.repeater("slide in ctrl.slides track by $index")).getText()
expect(HumAge).toEqual(PerAge);

由于空格,此操作失败。

不能使用 .trim() 的原因是因为 .getText() 返回一个承诺。您首先需要解决承诺,然后才能使用 .trim()

例如,您可以做的是这个。如果您使用像 Babel 这样的转译器或使用都支持 Async/Await 的 TypeScript,您还可以找到代码示例。

var PerAge, HumAge;
element(by.css("h1 > span.ng-binding")).getText()
  .then(function(text) {
    PerAge = text.trim();
  });
// Go to page 2
element(by.repeater("slide in ctrl.slides track by $index")).getText()
  .then(function(text) {
    HumAge = text.trim();
  });
expect(HumAge).toEqual(PerAge);
// If you can use async await because you transpile with Babel or use typescript you can do this to tidy the code
// $ is the Protractor shorthand for the `css`-locator
const PerAge = (await $('h1 > span.ng-binding').getText()).trim();
const HumAge = (await $('[ng-repeater="slide in ctrl.slides track by $index"]').getText()).trim();
expect(HumAge).toEqual(PerAge);

最新更新