Testing 如何登录web应用程序,然后使用TestCafe读取data.json文件的记录

Testing 如何登录web应用程序,然后使用TestCafe读取data.json文件的记录,testing,automation,automated-tests,e2e-testing,testcafe,Testing,Automation,Automated Tests,E2e Testing,Testcafe,我在谷歌上搜索过,我能找到如何循环浏览我的数据文件。显然,您对每个数据记录都运行了一个测试 我想让我的单个测试登录,然后循环浏览数据文件的每个“记录”或项目。数据是我们应用程序中的一系列搜索。因此,测试将登录并断言已登录,然后运行这些搜索 test('searches', async t => { await t // Log in... .typeText('input[id="login-name"]', 'aguy') .typeTe

我在谷歌上搜索过,我能找到如何循环浏览我的数据文件。显然,您对每个数据记录都运行了一个测试

我想让我的单个测试登录,然后循环浏览数据文件的每个“记录”或项目。数据是我们应用程序中的一系列搜索。因此,测试将登录并断言已登录,然后运行这些搜索

test('searches', async t => {
await t
    // Log in...   
    .typeText('input[id="login-name"]', 'aguy')
    .typeText('input[id="login-password"]', 'bbb')
    .click('button[id="signin-button"')
    .expect(Selector('span[id="logged-in-user"]').innerText).contains('Hal')  

    // At this point the app is ready to run through the searches doing this...
    // forEach item in my data...
        .typeText('input[id="simplecriteria"]', data.criteria)
        .click('button[class="search-button"]')
        .expect(Selector('div[class="mat-paginator-range-label"]').innerText).contains(data.srchResult)      
});
TestCafe有,我建议使用它们,即使它们在您的情况下并不常见,因为TestCafe会在测试之间删除cookie,所以如果您登录一次,然后像这样编写测试:

const testData=require('../Resources/testData.json');
让执行=假;
固定装置“搜索”
.页面(基本URL)
.beforeach(异步t=>{
如果(!已执行){
//在所有测试之前只运行一次
已执行=真;
//登录
等待
.typeText('input[id=“login name”]”,'aguy')
.typeText('input[id=“login password”],'bbb')
。单击('按钮[id=“登录按钮“'))
.expect(选择器('span[id=“登录用户”]”)。innerText)。包含('Hal');
}               
});
testData.forEach((数据)=>{
测试('搜索',异步t=>{
等待
.typeText('input[id=“SimpleLiteria”]”,data.criteria)
。单击('button[class=“search button”]”)
.expect(选择器('div[class=“mat paginator range label”]).innerText)。包含(data.srchResult);
});
}); 
那么您很可能在第一次测试后注销

但是,我仍然会在每个钩子之前使用
,但是将循环放在测试中:

const testData=require('../Resources/testData.json');
固定装置“搜索”
.页面(基本URL)
.beforeach(异步t=>{
等待
//登录。。。
.typeText('input[id=“login name”]”,'aguy')
.typeText('input[id=“login password”],'bbb')
。单击('按钮[id=“登录按钮“'))
.expect(选择器('span[id=“登录用户”]”)。innerText)。包含('Hal');
});
测试('搜索',异步t=>{
testData.forEach((数据)=>{
等待
.typeText('input[id=“SimpleLiteria”]”,data.criteria)
。单击('button[class=“search button”]”)
.expect(选择器('div[class=“mat paginator range label”]).innerText)。包含(data.srchResult);
});          
});
有明显的缺点:

  • 许多不同的搜索被添加为一个测试,因此如果一个测试失败,整个“搜索”测试用例将被标记为失败

另一个解决方案可能是找出登录意味着什么。如果是关于添加一些cookie,您可以登录一次,然后在测试之前只设置cookie。然而,在许多现代系统中,例如“登录cookie”将有
httpOnly
标志,因此您不能在JavaScript中真正设置它。

正如我所理解的,正如我所写的,每次测试都会有一个注销,每次搜索之间都需要一个新的登录。也许如果a理解登录/cookie的含义,我可以找到一个更好的方法。我正在远离Selenium,希望是这样aky为我们提供。在selenium测试中,我们能够登录,循环搜索,然后注销。如果只有一个搜索失败,我真的不担心失败,因为所有搜索都应该通过。我想我正在研究登录的可能性,将所有搜索作为单个测试的一部分,然后注销。当我尝试您的解决方案时ion,我们有一个弹出窗口,表明用户已经登录。我处理它的方式是使用的。每次之后和每次搜索后注销。它完成了工作,所以我想我没问题。不过,如果能够在一个测试中进行多个搜索,在所有搜索完成之前登录,然后注销,那就太好了。如果其中一个搜索失败,那么t是可以的,也是可取的。这样一个弹出窗口的创建方式可能是,关闭它后,您将得到一个没有httpOnly标志的cookie。如果是这样,我将设置此cookie,这样我就不需要单击关闭它。关闭此弹出窗口不是您在本测试中测试的内容,所以请尽量避免它并节省一些时间。