Все хорошо, что хорошо для тебя. Единого правильного ответа не существует. Поэтому я поделюсь своим опытом того, что хорошо для меня работает в моем текущем проекте. Вот сокращенный пример моего тестового скрипта
"use strict";
/*********************************************
* Imports
*********************************************/
const users = require("page-objects/users");
const {logIn, logOut} = require("actions/actions");
const editUser = require("page-objects/dialogs/edit-user");
/*********************************************
* E2E Test
*********************************************/
describe("Suite: Right for export", () => {
beforeAll(async () => await logIn("user-list"));
afterAll(async () => await logOut());
it("Case - Export enabled", async () => {
await users.searchFor("testuser12");
await users.clickEditLink("testuser12");
await editUser.enableExport(true);
await editUser.update();
expect(await users.getCellValue("Is Export Enabled")).toBe("YES");
});
});
1) Что входит в объекты страницы?
Как видите, я предпочитаю завершать действия в своих тестах. Таким образом searchFor нажимает на поле поиска, очищает его, набирает переданную строку, нажимает ввод и затем вызывает функцию ожидания, которая ждет, пока поиск не будет применен. Но если ни один технический специалист не хочет идти по шагам вручную, он, вероятно, догадывается, что ему нужно выполнить все вышеперечисленное, чтобы что-то искать. Вот почему все, что для них не важно, уходит за кулисы в Page-Objects.
2) Должны ли объекты страницы включать функции?
Почему бы и нет? :) Допустим, у меня есть всплывающее окно, которое меняет права пользователя. Помимо всех локаторов, перечисленных в объекте страницы (отдельный файл от теста), я могу включить действия, которые я выполняю с ним Допустим, что selectOption () будет щелкать раскрывающийся список-> выбрать параметр-> подтвердить. Или вы хотите нажать кнопку «Обновить» и подождать, пока диалоговое окно не исчезнет. Это все примеры методов, которые у меня есть в моем ПО. Посмотрите на синтаксис: если кто-то нетехнический видит editUser.enableExport(true);
, он может выяснить по имени объекта, в котором он находится (на какой странице выполняется действие) - здесь всплывающее окно editUser, тогда метод не требует пояснений. что он делает - включает экспортное право (или отключает, если передано false), а затем вы перечисляете параметры внутри () - true или false. Но старайтесь избегать ожиданий в ваших заказах, потому что для этого нужны тесты.
3) Как структурировать файлы?
Вероятно, все, что больше 700 строк, должно быть разделено. Но это не правило, скорее мой опыт. Создайте один файл на компонент, иногда на страницу. Но, например, если у страницы есть всплывающее окно, это, вероятно, отдельные объекты страницы. Для организации кода используйте js-классы, функции конструктора (ищите их). И тогда вы можете назначить глобальные переменные, если ваш конфиг, который указывает на эти файлы. Или, как я сделал, требуются необходимые компоненты перед каждым тестом - более долгий путь, но все в одном месте.
Удачи!