Утверждение полей формы необходимо в тесте транспортира с использованием объектной модели страницы - PullRequest
0 голосов
/ 29 января 2019

Основываясь на примере того, как требуется заполнить поле формы Как я могу проверить, требует ли элемент использования Protractor в angular2? , я попробовал два способа его кодирования, ниже которых работают.

it('should add a THING name required', function() {
  var foo = element(by.model('THING.name'));
  expect((foo).getAttribute("required")).toBe("true");
});

или

expect(element(by.model('THING.name')).getAttribute("required")).toBe(true);

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

var THINGNameField = element(by.model('THING.name'));

this.addTHINGName = function (THINGName) {
THINGNameField.sendKeys(THINGName);
};

С этим объектом этот код работает в файле спецификации / теста для добавления имени: THINGEditor.addTHINGName ('Test THING title');

но все, что я пытался проверить, требуется имя, либо приводит к невозможности прочитать свойство 'getAttribute' неопределенного, либо появляется ошибка "______ не определено"

Кто-то еще, кто пытался помочь, сказал, что это похоже на что-тоне возвращался правильно в объектном файле страницы, поэтому я изменил его, чтобы получить / установить в классе и создал новый объект в объектном файле страницы.Это улучшило то, что приведенное выше утверждение обнулилось, но это все еще не дает желаемого результата, и приложение, которое я тестирую, имеет много обязательных полей, поэтому мне нужно иметь возможность проверить эти определенные поля (по несколько на форму)являются обязательными, а не только то, что общее «требуется» существует на странице.Теперь мне интересно, если бы я просто отбросил это и утверждал вместо этого, что поле показывает «Имя *» в форме, а затем сделал тест, чтобы убедиться, что кнопка сохранения не активна для этой конкретной формы.На самом деле мне нужно убедиться, что у человека, заполняющего форму, есть визуальный индикатор того, что форма требуется, но также и то, что форма фактически выполняет требование, что может быть двумя разными вещами.Как вы все обычно проверяете, что поля обязательны для заполнения при использовании объектов страницы?

1 Ответ

0 голосов
/ 30 января 2019

Если вы делаете это с объектом страницы, вы должны создать класс, потребовать / импортировать класс и создать новый класс.Вероятно, происходит то, что имя и ссылка, на которые ссылаются, правильно экспортируются, что приводит к неопределенности.Следующий пример написан на TypeScript.

import {by, element, ElementFinder} from 'protractor';

export class FooPageObject {
  foo: ElementFinder = element(by.model('THING.name'));

  /**
   * Adds a name by sending the keys to the foo object.
   * @param keys The string representing the name
   * @return a promise
   */
  addName(keys: string): Promise<void> {
    return foo.sendKeys(keys);
  }

  /**
   * Gets the required attribute for the input box.
   * @return a promise to the boolean value
   */
  getRequired(): Promise<boolean> {
    return foo.getAttribute('required');
  }
}

В вашем тесте вы должны использовать async / await.Это можно сделать, установив для SELENIUM_PROMISE_MANAGER значение false в вашей конфигурации:

import {FooPageObject} from './path/to/foo';

describe('foo page object', () => {
  it('should add a name and check if it is required', async () => {
    const fooPageObject = new FooPageObject();
    await fooPageObject.addName('my name');
    expect(await fooPageObject.getRequired()).toBe(true);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...