当前位置: 首页 > 知识库问答 >
问题:

是否可以在Express.js中运行TestCafe测试?

程祺
2023-03-14

我试图弄清楚是否可以在Express.js应用程序的上下文中运行TestCafe测试。我的想法是创建一个表单,接受输入(如UPC代码),然后单击表单上的submit,它将导致TestCafe测试以无头模式(在某处)生成,并将UPC加载到此页面https://www.ebay.com/sh/research. 从那里,TestCafe将从页面获得结果并将它们粘贴到我的数据库中。

我把测试放在一个名为tests.js的文件中,并像这样路由/tests.js

// routes/test.js
const eBayScrapingHub =  (upc) => {
    test('Scraper 1', async t => {
    await t
        .wait(3000)
        .typeText(Selector('input[name="productId"]'), upc)
        .click(Selector('div#mainContent button[type="submit"].search-button.btn.btn--medium.btn--primary'))
        .wait(5000)
        console.log('finished!')
    });
 }

 module.exports = eBayScrapingHub;

路由文件本身名为ebay.js

// routes/ebay.js
const { eBayScrapingHub } = require('./tests');
const { Selector } = require('testcafe');

// Process Ebay Form
router.post('/', ensureAuthenticated, (req, res)=>{

        var query = req.body.input;

        console.log('This is your query: ', query);

        fixture `Ebay Seller Hub Scraper`
            .page `https://www.ebay.com/sh/research`;
            eBayScrapingHub(query);

    }
});

形式

// views/ebay/add.handlebars
<div class="card card-body">
    <h3>Add UPC</h3>
    <p>Input a UPC Code to search eBay</p>
    <form action="/ebay" method="post">
        <div class="form-group">
            <label for="input">Input</label>
            <input type="text" class="form-control" name="input" required>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</div>

不幸的是,在我尝试这样做的那一刻,各种各样的错误都出现了。

我尝试从“testcafe”使用import{selector}导入选择器,但出现以下错误:

import { Selector } from 'testcafe';
       ^

SyntaxError: Unexpected token {

所以我把它改为const{Selector}=require('testcafe') 以消除错误。

现在它不会工作,因为不认识"夹具":

参考错误:未定义夹具

有人能让我知道这是否可能或者如何做对吗?谢谢你!


共有2个答案

平山
2023-03-14

对于将来可能有用的其他人,我已通过以下方式解决了这一问题:

在express中,/routes文件:

// /routes/testcafe.js
const express = require('express');
const router = express.Router();
const createTestCafe = require('testcafe');
var testcafe = null;

router.get('/testcafe', (req, res) => {
    createTestCafe('localhost', 1337, 1338)
    .then(tc => {
        testcafe = tc;
        const runner = testcafe.createRunner();
        console.log('About to start tests/myTest.js!');

        return runner
        .src(['/root/user/express_server/routes/tests/myTest.js'])
        .browsers(['firefox:headless'])
        .run()
    })
    .then(failedCount => {
        console.log('Tests failed: ' + failedCount);

        testcafe.close()
    });

});

module.exports = router;

将上述代码放入文件后,它只需向我的服务器发送一个get请求,地址如下,即可成功启动测试:

http://express_server_ip:port/testcafe

袁玮
2023-03-14

不要将TestCafe夹具/测试定义与您的自定义代码混合。分开保存。

看一看编程接口文章,它描述了如何从自定义Node.js代码运行TestCafe测试。

 类似资料:
  • 问题内容: 基本路线是这样的: 是否可以命名该路由并在任何模板中使用它,以便可以像这样使用它: 灵感来自Django :) 问题答案: 没有开箱即用的机制。但是,您可以模仿Django的样式:定义文件,该文件将包含URL数组。首先开始: myviews.js urls.js 现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样: app.js 现在,您可以定义自定

  • 问题内容: Eclipse支持增量编译。如果我保存一个源文件,那么它将编译修改后的文件。 在进行这样的增量编译后,是否还可以运行同一软件包的JUnit测试并在错误视图中显示失败。然后,我可以在同一视图中看到JUnit测试失败并编译错误,而无需执行其他操作。有没有可以做到的插件? 问题答案: 您必须查看以下插件: JUnit Max:不是免费的,由Kent Benk(TDD练习背后的人之一)开发;

  • 问题内容: 如果是跑它运行在您的文件结尾通过运行启动格式的功能和使用(* T testing.T)模块。我想知道文件中的每个功能是同时运行还是确定地分别运行每个功能?是否为每个人创建一个执行例程?如果确实为每个例程创建了一个go例程,是否可以某种方式监视go例程?是否有可能做类似的事情并为每个实例获取一个实例并对其进行监控,诸如此类? 注意:这个问题假设您使用go(测试)随附的测试框架。 问题答案

  • 问题内容: 我知道不可能在ubuntu上编码测试,因为我需要苹果的xCode,但是我想知道,一旦编码,是否可以在Ubuntu上运行自动化测试。 谢谢。 问题答案: 否,不幸的是,appium需要使用xCode才能使用UiAutomation和工具在iOS上执行测试。

  • 问题内容: 我正在使用Celery管理异步任务。但是,有时候,芹菜加工过程会停止,这不会导致任何任务被执行。我希望能够检查芹菜的状态,并确保一切正常,如果我发现任何问题,请向用户显示错误消息。从Celery Worker文档中看来,我可能可以使用ping或inspect进行此操作,但是ping感觉很笨拙,并且不清楚要使用的检查方式是否确切(如果inspect()。registered()为空?)。

  • 我找到了关于如何从Java中启动JUnit 4测试用例的说明,但是还没有找到在JUnit 5测试用例上启动测试的结构。 我尝试的JUnit 4解决方案是这样的:如何从我的java应用程序内部运行JUnit测试? 我一直在尝试让JUnit5中的控制台启动器工作,但它会引发异常。这记录在这里:http://junit.org/junit5/docs/current/user-guide/#runnin