簡體   English   中英

是否可以在 Express.js 中運行 TestCafe 測試?

[英]Is it possible to run a TestCafe test within Express.js?

我想弄清楚是否可以從 Express.js 應用程序的上下文中運行 TestCafe 測試。 我的想法是創建一個表單,接受輸入(如 UPC 代碼),然后單擊表單上的提交,它會導致 TestCafe 測試以無頭模式(某處)生成並將該 upc 加載到此頁面https://www .ebay.com/sh/research 從那里,TestCafe 將從頁面獲取結果並將它們粘貼到我的數據庫中。

我把測試放在一個名為 tests.js 的文件中,並把它像這樣 routes/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>

不幸的是,當我嘗試這樣做時會出現各種錯誤。

我嘗試使用 import { Selector } from 'testcafe' 導入選擇器並收到此錯誤:

import { Selector } from 'testcafe';
       ^

SyntaxError: Unexpected token {

所以我把它改成const { Selector } = require('testcafe'); 使錯誤消失。

現在由於不識別“夾具”而無法正常工作:

ReferenceError: fixture is not defined

任何人都可以讓我知道這是否可行或如何正確地做到這一點? 謝謝!

不要將 TestCafe 夾具/測試定義與您的自定義代碼混合。 分開保管。

查看編程接口文章,該文章描述了如何從您的自定義 Node.js 代碼運行 TestCafe 測試。

對於將來可能對其有用的其他人,我通過以下方式解決了這個問題:

在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM