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

Set*_*den 13 javascript css-selectors node.js ecmascript-6 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;
Run Code Online (Sandbox Code Playgroud)

thingSelector的位置是:

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

OpenThing的地方是:

const OpenThing = name =>
    thingSelector(name)
        .find('a.thing-footer-item')
        .withText('Open');
Run Code Online (Sandbox Code Playgroud)

我需要能够继续执行,如果对象不在那里,我正在检查它是否存在,或者对象是否存在,我正在检查它是否存在,以及对象不存在的情况它不存在,对象不存在,我正在检查它不存在.

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

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

if (!await t.expect(thing.exists).ok())
Run Code Online (Sandbox Code Playgroud)

if (await t.expect(thing.exists).notOk())
Run Code Online (Sandbox Code Playgroud)

如果上述某个方案在一个方案中没有失败,则在另一个方案中将失败,而另一个方案将在第一个方案没有失败的情况下失败.我需要一些能给我逻辑的东西,但不会让脚本执行失败,并且仍然允许我返回True或False,具体取决于对象是否存在.

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

小智 20

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

if(await things.thingSelector(thingName).exists) {
    // do something 
} 
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我现在明白它应该如何工作.这工作!! :-DI爱学习! (4认同)
  • 可能会出现假阴性,因为如果元素不存在(还),测试驱动程序将立即解决此承诺.也就是说:例如,如果您是单击按钮并将元素显示出来,但在评估if子句时,元素尚未呈现,则该子句将评估为false.如果仅在片刻之后进行评估,它将返回真实. (3认同)

Mau*_*hez 5

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

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

  • 我成功了:对于“true”情况,您还必须添加“.ok()”,如下所示 ->“.expect(Selector('#existing-element').exists).ok()”,不带“ .ok()` 在我的例子中它失败了。 (3认同)
  • 我用了这个样本。在我的第一次尝试中,我的测试失败并出现以下错误消息:“ReferenceError:选择器未定义”。比我将它导入到我的测试文件中,如下所示:`import { Selector } from 'testcafe';`。再次运行测试后,它再次失败并显示新消息:“未指定断言方法”。知道如何解决这个问题吗? (2认同)