javascript - 如何在 Node.js 和 TestCafe 不等待检查选择器是否不存在的情况下编写 if 条件

标签 javascript jquery node.js ecmascript-6 testcafe

对于总的 N00b 问题,我们深表歉意,但是,

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

但是,无论哪种情况,当模式 B 处于事件状态时,屏幕上始终有一个元素,而当模式 A 处于事件状态时,它不在屏幕上。 此外,模式 A 的工作流程略长,带有一些额外的交互控件。让我们称这个元素为“ProfileIdentifier”。我有一个定位器,我想编写一些逻辑代码来检查这个元素是否不存在,然后与额外的控件交互并执行更长的工作流程,然后是公共(public)控件和工作流程之间常见的模式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 这样的代码,因为这不是在 JavaScript 中利用 CSS 定位器的最佳(性能和稳定)方式,特别是如果我们必须在网站的其他部分重复使用类似的定位器来进行样式设置和其他测试自动化。

最佳答案

您可以使用 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
}

关于javascript - 如何在 Node.js 和 TestCafe 不等待检查选择器是否不存在的情况下编写 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208410/

相关文章:

javascript - 如何将 Node 可读流转换为 RX 可观察流

javascript - Ajax 从不调用我的 .NET 方法?

javascript - 如果数组成员被包装,为什么 typescript 泛型会推断出不同的类型?

javascript - 如何从现有 JSON 文件添加新 JSON

javascript - 如何为元素提供位置值以在所有屏幕分辨率下完美对齐?

javascript - Node js/javascript : how to process streams sequentially with pipe and async/await when parsing csv and calling webservices with got?

android - 类型错误 :Request path contains unescaped characters - npm & cordova

javascript - React - 由于某种原因,Babel Polyfill 不会阻止 Set 或 Weakmap 上的异常,但会填充 Promise

javascript - 使用 ajax 从数据库 EntityFramework 中删除记录

jquery - Tab 键不起作用