TestCafe - 如何在不失败测试的情况下检查Web元素是否存在?

时间:2017-11-17 21:39:06

标签: javascript node.js ecmascript-6 css-selectors testcafe

我尝试编写一个脚本,需要根据CSS选择器找到的特定浏览器对象是否存在来调整其工作流行为。

我不想使用document.getElementByID方法,因为这在技术上并不是一个CSS选择器,我们的整个企业都是在CSS选择器上标准化的,所以除了CSS选择器以外的其他任何东西都不会成功无论如何都要通过我们的代码审查流程。

var thing = await things.thingSelector(thingName);
if (await t.expect(thing.exists).notOk()) {
   await t.click(things.OpenThing(thingName));
} else {
   return false;
}
return true;

其中thingSelector是:

const thingSelector = name =>
  Selector('p.thing-header-title span')
    .withText(name)
    .parent('div.thing');

OpenThing在哪里:

const OpenThing = name =>
    thingSelector(name)
        .find('a.thing-footer-item')
        .withText('Open');

如果对象不存在,我需要能够继续执行,并且我检查它是否存在,或者对象是否在那里并且我检查它是否存在,还有如果对象不存在且不存在且对象不存在且我检查它不存在的情况。

在所有情况下,我仍然需要继续工作流程。

我尝试过逻辑硬币的两面:

if (!await t.expect(thing.exists).ok())

if (await t.expect(thing.exists).notOk())

如果其中一个在一个场景中没有失败,那么另一个场景就会失败,另一个场景在第一个场景没有失败的情况下会失败。我需要一些能给我逻辑的东西,但是不会让脚本执行失败,仍然允许我返回True或False,具体取决于对象是否存在。

提前感谢您帮助我解决这个问题,并且还学习并发展我的Javascript技能!

3 个答案:

答案 0 :(得分:14)

您可以通过以下方式检查exists条件中的异步if属性:

if(await things.thingSelector(thingName).exists) {
    // do something 
} 

答案 1 :(得分:1)

您可以使用以下断言来测试存在和不存在元素:

test('Test existence and non-existence elements', async t => {
    await t
        .expect(Selector('#existing-element').exists)
        .expect(Selector('#non-existing-element').exists).notOk()
});

答案 2 :(得分:0)

这对我有用,你可以试试

async veriryCreativeIconButtonNotExists(){
await t.expect(this.exportButton.exists).ok()
await t.expect(this.columnPickerIcon.exists).ok()
await t.expect(this.filterColumnIcon.exists).ok()
if (await t.expect(this.columnPickerIcon.exists).ok()){
  await t.expect(this.creavtiveIconButton.exists).ok()
  await t.click(this.creavtiveIconButton)
  await t.expect(this.creativeImage.exists).ok()
  await t.click(this.creativeImage)
} else {
  return false;
}
return true;