【问题标题】:How to select correct value depending on params?如何根据参数选择正确的值?
【发布时间】:2020-07-20 19:03:12
【问题描述】:

所以我试图用量角器解决一个我没有多少选择的解决方案。我希望能够测试介于 1600、1900 和 else 语句之间的时间段。

如果我们选择 1600 那么我们显然会做 1600 元素等等。

当我开始编写代码时,它会执行代码:

npm run e2e.js --params.tiemslot.t1600

它也可以是 t1900 或根本没有参数。

测试用例如下:

const utils = require("../utils/utils");
const ServicesPage = require("../objects/servicesPage.obj");

describe("Services page", function () {
    servicesPage = new ServicesPage();

    if (browser.params.timeslot.t1600) {
        it("Has truck and choose 1600 timeslot delivery",
            async function () {
                const nextStep = servicesPage.getForm().buttons.nextStep;

                await servicesPage.truckLateDelivery();

                await utils.elementToBeClickable(nextStep);
                await utils.click(nextStep);
            })
    }
    else if (browser.params.timeslot.t1900) {
        it("Has truck and choose 1900 delivery",
            async function () {
                const nextStep = servicesPage.getForm().buttons.nextStep;

                await servicesPage.truckLateDelivery();

                await utils.elementToBeClickable(nextStep);
                await utils.click(nextStep);
            })
    }
    else {
        it("Has truck and choose latest delivery",
            async function () {
                const nextStep = servicesPage.getForm().buttons.nextStep;

                await servicesPage.chooseLatestDelivery();

                await utils.elementToBeClickable(nextStep);
                await utils.click(nextStep);
            })
    }
});

我的对象脚本是

const utils = require("../utils/utils");
const servicesPage = require("../specs/servicesPage.specs");

module.exports = class DetailsPage {
    constructor() {
        const _buttons = {
            nextStep: servicesPage.nextStepButton,
            lateDelivery: servicesPage.lateDeliveryCheckbox,
            truck: servicesPage.truckButton,
            timeSlotAll: servicesPage.timeslotAll,
            timeSlot1600: servicesPage.timeSlot1600,
            timeSlot1900: servicesPage.timeSlot1900,
        };

        this.getFormButtons = function () {
            return _buttons;
        };
    }

    getForm() {
        return {
            buttons: this.getFormButtons()
        };
    }

    async truckLateDelivery() {
        const truckButton = this.getForm().buttons.truck;
        const lateDelivery = this.getForm().buttons.lateDelivery;
        const timeslot = this.getForm().buttons.timeSlot1600;

        //Choose Truck
        await utils.elementToBeClickable(truckButton);
        await utils.click(truckButton);

        //Click Late Delivery
        await utils.elementToBeClickable(timeslot);
        await utils.click(timeslot);

        //Click late hour checkbox
        await utils.elementToBeClickable(lateDelivery);
        await utils.click(lateDelivery);
    }

    async chooseLatestDelivery() {

        const truckButton = this.getForm().buttons.truck;
        const lateDelivery = this.getForm().buttons.lateDelivery;
        const timeSlots = this.getForm().buttons.timeSlotAll;

        //Choose Truck
        await utils.elementToBeClickable(truckButton);
        await utils.click(truckButton);

        //check if timeslots are avaliable
        await utils.presenceOf(timeSlots);

        const countElement = await timeSlots.count();
        console.log(`Found ${countElement} timeslots buttons`);

        //Choose last timeslot
        await utils.elementToBeClickable(timeSlots.last());
        await utils.click(timeSlots.last());

        //Click on checkbox
        await utils.elementToBeClickable(lateDelivery);
        await utils.click(lateDelivery);
    }
};

我的问题是我需要以某种方式给出值async truckLateDelivery() { 才能知道基本上运行 t1600 或 t1900,但我不确定我该怎么做?因为如您所见,我的函数 _buttons 具有正确的元素,并且我拥有函数 truckLateDelivery() 来处理测试。

所以我的问题是如何让测试用例知道我是否要运行 npm run e2e.js --params.tiemslot.t1600 来运行 t1600 以及是否编写 npm run e2e.js --params.tiemslot.t1900 来运行 t1900 并选择正确的元素?

【问题讨论】:

  • /** * params 对象将直接传递给 Protractor 实例,* 并且可以作为 browser.params 从您的测试中访问。它是一个任意的 * 对象,可以包含您在测试中可能需要的任何内容。 * 这可以通过命令行更改为: * --params.login.user "Joe" * * 示例:* params: { * login: { * user: 'Jane', * password: '1234' * } * } */ 参数?:任何; github.com/angular/protractor/blob/master/lib/config.ts

标签: javascript selenium if-statement parameters protractor


【解决方案1】:

最好的方法是将一个值传递给 truckLateDelivery() 函数,然后在其中包含一个 if 语句。例如

    async truckLateDelivery(timeslot) {
        const truckButton = this.getForm().buttons.truck;
        const lateDelivery = this.getForm().buttons.lateDelivery;
        const timeslot = this.getForm().buttons.timeSlot1600;

        //Choose Truck
        await utils.elementToBeClickable(truckButton);
        await utils.click(truckButton);

        if(timeslot = 1600)
        {
          //Click Late Delivery
          await utils.elementToBeClickable(timeslot);
          await utils.click(timeslot);
        }
        else
        {
          //Click late hour checkbox
          await utils.elementToBeClickable(lateDelivery);
          await utils.click(lateDelivery);
        } 
    }

然后当您致电truckLateDelivery() 时,只需将其称为
await servicesPage.truckLateDelivery(1600); 延迟交付
await servicesPage.truckLateDelivery(1900); 延迟交付 1 小时

【讨论】:

  • 这真的很聪明!我没有考虑过,但我确实同意你在这里所做的。我非常感谢您的帮助,这对我帮助很大! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多