为了账号安全,请及时绑定邮箱和手机立即绑定

赛普拉斯测试的随机元素选择

赛普拉斯测试的随机元素选择

慕工程0101907 2022-07-15 10:09:32
目前正在测试一个本地电影预订网站,我必须在其中输入选定电影的一定数量的票。此处附加屏幕的屏幕截图 -用于重现问题的存储库 - https://github.com/zac11/iCinema克隆回购。进入client目录并执行npm inpm start从根目录运行。Webapp 将在localhost:3000我希望能够以随机方式输入所选电影的电影票,这样它可以选择四个票中的随机类别并输入票号,例如 2现在我可以通过以这种方式对定位器进行硬编码来填写票证类别 -  cy.get('div.tickets-info > div:nth-child(1) > span > b').type(3,{force:true});输入Junior Ticket类别的票数。我希望能够在四个类别中的任何一个类别中随机输入一张票,而无需对类别定位器进行硬编码。PS - 存储库包含柏树测试也可以使用npm run test
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您可以根据以下内容随机化类别:


const picked = Math.floor(Math.random()*3); // this gives you a random value from 0 - 3;


// using template string literals - we can add that into picked

cy.get(`div.tickets-info > div:nth-child(`${picked}`) > span > b`).type(3, {force: true})

从picked - 你可以有一个与类别相关的元素数组:


const categories = ["Junior", "student", "normal", "senior"]

您还可以将门票的值categories作为对象并将其用于计算总数。


const categories = [{

  type: "junior", 

  value: 5

}, {

  type: "student",

  value: 3

}, {

  type: "normal"

  value: 10

}, {

  type: "senior",

  value: 3

}]

你可以说,使用选择的值来计算总金额


const value = categories[picked].value * random_amount;

cy.get(".sum-field label:nth-child(1)").should("contain", value) // total


查看完整回答
反对 回复 2022-07-15
?
偶然的你

TA贡献1841条经验 获得超3个赞

我需要对我们的应用程序做同样的事情,所以我想出了一个自定义命令来轻松实现这一点。这是我提出的代码cypress/support/commands.js:


Cypress.Commands.add('any', { prevSubject: 'element' }, (subject, size = 1) => {

  return cy.wrap(subject).then(elementList => {


    // this line enables me to use this command with either cy.get() or cy.wrap()

    elementList = (elementList.jquery) ? elementList.get() : elementList;


    elementList = Cypress._.sampleSize(elementList, size);

    elementList = (elementList.length > 1) ? elementList : elementList[0];


    return cy.wrap(elementList);

  });

});

我还可以在自定义命令中使用带有Cypress.log()的自定义日志记录。为了清楚起见,我从上面的代码中删除了它。


然后,您可以像使用任何其他 cy 命令一样在测试中使用它:


cy.get('div.tickets-info > div > span > b').any().type(3,{force:true});

或者如果您需要多个:


cy.get('div.tickets-info > div > span > b').any(2).each(element => {

    cy.wrap(element).type(2, { force: true });

});


查看完整回答
反对 回复 2022-07-15
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号