如何编写if条件而不等待检查Node.js和TestCafe

时间:2017-11-09 17:47:20

标签: javascript jquery node.js ecmascript-6 testcafe

对于总的N00b问题感到抱歉,但是这里有,

我正在编写一些测试自动化,而我自动化的网站有时会对页面上的某些元素有某些行为,有时它会对页面上的不同元素有不同的行为。它通常属于两种模式之一。称之为模式A&模式B. 问题是模式A和模式之间存在一些共享元素。模式B,所以它不仅仅是不同的元素。

但是,在任何一种情况下,当模式B处于活动状态时,屏幕上总会有一个元素,当模式A处于活动状态时,它不在屏幕上。 模式A的工作流程稍长,还有一些额外的控件可以与之交互。让我们称这个元素为“ProfileIdentifier”。我有一个定位器,我想写一些逻辑代码来检查这个元素是否不存在然后与额外的控件交互并执行更长的工作流程,然后是常见的控件和工作流程模式A&模式B.

简而言之,就像这样:

import mypage from '../../page-objects/mypage'; //JS file with all the locators for that page.

async function FillOutForm(t) {
    var profileIdentifier = t.getElement(mypage.profileIdentifierLocator);
    if (not(profileIdentifier.exists)) {
        // Do the extra workflow
    }
    // Do the common workflow
}

也许是这样的:

import mypage from '../../page-objects/mypage'; //JS file with all the locators for that page.

async function FillOutForm(t) {
    var profileIdentifier = t.getElement(mypage.profileIdentifierLocator);
    if (profileIdentifier.exists.notOk()) {
        // Do the extra workflow
    }
    // Do the common workflow
}

注意:我看过其他类似的问题: related question #1

我确实在这个问题的答案中看到了一线希望: Possible answer

$('.myModal').isPresent().then(function(inDom) {
     return inDom; // returns bool
};

我正在使用Atom JavaScript编辑器,结合TestCafe和ES6,我更愿意放弃像getElementById这样的代码,因为这不是利用CSS定位器的最好(高效和稳定)方式JavaScript,特别是如果我们必须在我们网站的其他部分重复使用类似的定位器来进行样式设置和其他测试自动化。

1 个答案:

答案 0 :(得分:2)

您可以使用exists异步属性来检查元素是否存在。

import mypage from '../../page-objects/mypage'; //JS file with all the locators for that page.

async function FillOutForm(t) {
    if (!await mypage.profileIdentifierLocator.exists) {
        // Do the extra workflow
    }

    // Do the common workflow
}