选择器需要使用函数来进行初始化。

4

我成功地选择了许多页面元素,现在我正在将所有这些元素传递给单独的页面模型和帮助函数。

关于后者,我创建了一个帮助函数类,如下所示:

import { Selector } from 'testcafe';

export default class Helpers {
  selectPageElement (elementName) {
    const elementTitle = Selector ('div').child('h2');

    const numberOfElements = elementTitle.count;

    if (numberOfElements) {
      for (let i = 0; i < numberOfElements; i++) {
        if (elementTitle.nth(i) === 'aname') {
          return elementTitle.nth(i);
        }
      }
    } else {
      return false;
    }
  }
}

然后在我的测试文件中,我按以下方式调用该方法:
import { ClientFunction, Selector } from 'testcafe';
import Helpers from './helpers';

...
const helpers = new Helpers();

test('Test name', async t => {
  ...
  await t
    .click(helpers.selectPageElement('Element Name'));
});

但是我遇到了下面的错误:

Action "selector" argument error:

Selector is expected to be initialized with a function, CSS selector string, 
another Selector, node snapshot or a Promise returned by a Selector,
but undefined was passed.

我对ES6还比较陌生,所以我相信这与我调用该方法的方式有关。

1个回答

4
一种解决方案可能是:
export default class Helpers {
  selectPageElement (elementName) {
    return Selector('div > h2')
      .withText(elementName);
  }
}

3
我唯一想要补充的是,这个原始代码const numberOfElements = elementTitle.count;可能会出现错误,因为缺少 await 关键字。请参考此部分https://devexpress.github.io/testcafe/documentation/test-api/selecting-page-elements/selectors/。 - Alex Kamaev

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