在使用页面对象模型的量角器测试中,需要声明表单字段

时间:2019-01-29 19:46:42

标签: javascript jasmine protractor

基于一个需要声明How can I check if an element is require using Protractor in 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);
};

对于该对象,此代码在spec / test文件中起作用以添加名称:   THINGEditor.addTHINGName(“测试事物标题”);

但是我尝试验证名称的所有操作都是必需的,或者导致无法读取未定义的属性'getAttribute'或错误消息“ ______未定义”

其他尝试提供帮助的人说,似乎页面对象文件中未正确返回某些内容,因此我将其更改为在类中获取/设置,并实例化了页面对象文件中的新对象。经过改进的东西可以使上面的断言解析为null,但是仍然不能提供理想的结果,并且我正在测试的应用程序具有许多必填字段,因此我需要能够验证某些字段(每个表单几个)是必需的,而不仅仅是页面上存在通用的“ required”。 我现在想知道是否应该只是将其废弃并断言该字段在表单上显示“ Name *”,然后进行测试以确保该特定表单的保存按钮不可单击。 确实,我需要验证填写表单的人是否具有视觉上的指示,表明该表单是必需的,而且该表单实际上是强制执行该要求的,这可能是两件事。 大家通常如何在使用页面对象时验证是否需要字段?

1 个答案:

答案 0 :(得分:1)

如果要对页面对象执行此操作,则应创建一个类,要求/导入该类,然后创建一个新类。可能正在发生的事情是是否正确导出了被命名和引用的var,从而导致其未定义。下面的示例在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);
  });
});