JavaScript: выбор элементов раскрывающегося списка с использованием объектов страницы для тестирования Protractor

Так что я не могу понять это.

Мой тест требует выбора элемента списка как части формы для создания нового пользователя. Однако, когда я запускаю тест, он не выбирает элемент из списка. И Protractor не возвращает никаких ошибок, он считает, что тест прошел успешно.

Функция, которую я использовал ранее, работала, но, пытаясь уменьшить повторение кода и повысить плавность и гибкость, я начал преобразовывать тест для включения объектов страницы.

Ниже приведен мой тестовый документ, в котором показаны функции, вызываемые из двух разных объектов страницы:

it('Should create first new User.', function() {
    var users_page = require('../page/users_page.js');
    var addUser_page = require('../page/addUser_page.js');
    users_page.addUserButton.click();
    addUser_page.addUser('Test', 'Smith', '[email protected]', 'Password', 'Password', '0');
    addUser_page.userRole[1];
    addUser_page.confirmNewUser.click();
    addUser_page.backToUsersPage.click();
});

Здесь работает все кроме строки 6 - выбор пункта списка.

Ниже приведен фрагмент объекта страницы, на который я ссылаюсь при вызове функции .userRole:

this.userRole = function (index) {
    this.element(by.model('tes.userRole')).$('[value="'+index+'"]');
};

ПРИМЕЧАНИЕ. Нет проблем с тем, что объекты страницы взаимодействуют с тестом, поскольку существует множество других функций, которые ДЕЙСТВИТЕЛЬНО работают.

Дайте мне знать, если вам нужна дополнительная информация, ура.


person Dylface    schedule 23.02.2015    source источник


Ответы (1)


Я сталкивался с этой проблемой несколько раз; если вы хотите щелкнуть объект, вам нужно будет написать что-то вроде этого в вашем объекте страницы:

this.clickUserRoleByIndex = function (index) {
    this.element(by.model('tes.userRole')).$('[value="'+index+'"]').click();
};

ИЛИ что, я думаю, ты хочешь сделать...

Вы можете сделать что-то вроде этого, чтобы получить этот объект:

this.getUserRoleByIndex = function (index) {
    return this.element(by.model('tes.userRole')).$('[value="'+index+'"]');
};

Обратите внимание, что return дает вам этот объект, с которым затем можно взаимодействовать в полном тесте — я укусил его, прежде чем понял, что, конечно, он будет неопределенным, если я не верну что-то в этой функции!

Надеюсь, это поможет! :D

person chuckwired    schedule 05.03.2015
comment
Да, я добавил «возврат», и это решило проблему, спасибо, братан. - person Dylface; 10.03.2015