Как правильно выбрать значение в зависимости от параметров? - PullRequest
1 голос
/ 08 апреля 2020

Итак, я пытаюсь решить проблему с транспортиром, где у меня мало вариантов. Я хочу иметь возможность тестировать временные интервалы между 1600, 1900 и оператором else.

Если мы выберем 1600, тогда мы, очевидно, сделаем элемент 1600 и et c et c.

Когда я запускаю свой код, он выполняет код:

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 и выбрать правильный элемент?

1 Ответ

1 голос
/ 09 апреля 2020

Лучший способ сделать это - передать значение в функцию 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 час

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...