Цепочка переменных элементов для лучшего расположения в транспортире

В транспортире я пытаюсь очистить свои локаторы и немного лучше организовать вещи. В настоящее время у меня есть переменная, которая содержит локатор элементов для диалога и кнопку сохранения:

var StoryPage = function(){
    this.dialog = element(by.css('md-dialog'));
    this.saveButton = element(by.buttonText('Save'));
}

Мой вопрос в том, есть ли способ связать эти переменные элемента, чтобы я мог найти кнопку сохранения в диалоговом окне, например:

this.dialog.saveButton.click()

or

this.dropdown.saveButton.click()

Заранее спасибо!


person Colm Gallagher    schedule 16.06.2016    source источник


Ответы (1)


Да, вы можете связывать средства поиска элементов в Protractor:

var StoryPage = function() {
    this.dialog = element(by.css('md-dialog'));
    this.saveButton = this.dialog.element(by.buttonText('Save'));
}

Теперь кнопка Save будет расположена внутри/в области/внутри элемента md-dialog.


Если вы хотите «масштабировать» это для нескольких объектов страницы, вы можете определить объект базовой страницы:

var BasePage = function() {
    this.getSaveButton = function () {
        return this.dialog.element(by.buttonText('Save'));
    }
}

module.exports = new BasePage();

Затем используйте прототипное наследование, чтобы наследовать другие объекты вашей страницы от базовой, что позволит вам иметь save кнопок внутри разных диалоговых контейнеров:

var BasePage = require("base");

var StoryPage = function(){
    this.dialog = element(by.css('md-dialog'));
}

StoryPage.prototype = Object.create(BasePage);

module.exports = new StoryPage();
person alecxe    schedule 16.06.2016
comment
Я знаю, что вы можете связать такие элементы. Однако вместо того, чтобы создавать saveDialogButton, а затем saveDropdownButton и так далее, мне интересно, можете ли вы иметь универсальный saveButton, который вы цепляете после начального элемента. - person Colm Gallagher; 16.06.2016
comment
@ColmGallagher хорошо, конечно. Обновлено с образцом подхода. Надеюсь, мы все еще на одной волне (обратите внимание на игру слов :)). - person alecxe; 16.06.2016
comment
Бесконечно благодарен! Идея прототипа — это именно то, что мне было нужно. Я только что создал свою учетную запись (должен был сделать это несколько лет назад), но как только я наберу 15 баллов, я позабочусь о том, чтобы вы получили тот голос, которого заслуживаете. - person Colm Gallagher; 16.06.2016