2017-11-17 92 views
1

我想写一个脚本,需要根据CSS选择器找到的特定浏览器对象是否存在或不存在来调整其工作流行为。TestCafe - 如何在不失败测试的情况下检查Web元素是否存在?

我不想使用document.getElementByID方法,因为这在技术上不是一个CSS选择器,而且我们的整个企业都是在CSS选择器上进行标准化的,所以任何走过DOM然后走过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技能!

+0

你是什么意思“失败的脚本执行”?如果你得到一个错误,所有的细节应该在问题中。另外,由于'await'在被拒绝的承诺后不会返回,这将有助于了解如何以及如果't.expect(thing.exists).notOk())'可以被拒绝。 – traktor53

回答

3

您可以检查if条件异步exists属性按以下方式:

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

非常感谢!我现在明白了它应该如何工作。这工作! :-我喜欢学习! –

相关问题