【发布时间】: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