在量角器中填写表格的更有效方法?

时间:2018-06-21 14:06:48

标签: angular protractor automated-tests

我有一个e2e测试,该测试以应用程序的形式填写数据。我想使代码更高效,并且想知道是否值得。基本上,我的代码目前将密钥发送到所有必填字段,然后单击保存按钮。从那里,我检查数据是否正确显示,并显示成功消息。保存表单后的测试并不是我需要提高效率的。这是填写表格的过程。因此,我很想知道是否有人可以提供更实用的见解。我有点困惑,因为量角器使用了promise,所以对我的表单进行循环实际上不会起作用,因为元素将不可见。另外,我有一个电子邮件验证和下拉菜单,因此执行循环实际上并不会很好,因为有些字段需要特定格式。我当时正在考虑创建一个可以填写整个表单的函数,然后仅在测试中调用该函数,以使测试效率更高。我只是不确定这样做是否值得。任何建议都很好。我应该按原样保留代码吗?这是我填写表格的代码示例。谢谢!

  page.getNameInput().sendKeys('test');
  browser.sleep(1000);
  page.getLastNameField().sendKeys('testLast');
  browser.sleep(1000);
  page.getEmailField().sendKeys('test@test')

  //these are drop down menus
  page.getProgramField().sendKeys(Key.RETURN);
  page.getProgramField().sendKeys(Key.RETURN);
//2nd drop down
  page.getFileField().sendKeys(Key.RETURN);
  page.getFileField().sendKeys(Key.RETURN);
})

1 个答案:

答案 0 :(得分:2)

因此,一般来说,使用browser.sleep()是非常糟糕的,因为您实际上不知道操作完成的确切时间。这就是他们发明诺言的原因。

在您的特定情况下,一种选择是创建一个名为async fillInput(element, text)的函数。该函数负责将数据填充到使用ElementFinder创建的element(by.css('SOME_CSS_RULE'))对象中。

export async function fillInput(el, text) {
  await el.click()
  await el.clear();
  await el.sendKeys(text);
}

在该函数中,您可以看到await的用法。实际上,它正在等待兑现承诺,并破坏其价值。这消除了无限嵌套promises的痛苦。await在每个异步函数中都可用。当您在单词async之前加上一个函数时,它就是异步的。 在这种情况下,fillInput()返回一个Promise<void>对象,因为每个async函数都返回一个Promise

将给定功能与await结合使用,您可以在测试中执行以下操作:

// ...
var page;

t.beforeAll(function() {
  page = getMyPage();
});

t.it('should be able to fill out form' , async function() {
  await fillInput(page.getNameInput(),  'foo');
  await fillInput(page.getLastNameField(), 'bar');
  // ...
});