如何使用量角器正确编写菜单选择测试?

时间:2018-10-04 11:45:07

标签: protractor

我试图了解如何在量角器测试中关联事件。我在下面有一个最小化的示例,如果包含第二个browser.sleep(browser.sleep(3000)),则测试通过。由于click-event(element(by.tagName('mat-form-field))。click())的承诺现在应该已经解决。我不知道为什么测试没有通过。

是因为在单击之后,即在单击事件之后但在操作完成之前触发了诺言,该承诺已经解决了吗? (显示带延迟的下拉菜单)

如果是这种情况,我应该如何创建一个测试,该测试要等到选择菜单可见后才能继续从菜单中选择一个选项?

相关问题:Selecting a element in a drop-down menu in protractor

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

describe('workspace-project App', () => {
  
    it('should select', () => {
      browser.get('http://localhost:4200/test').then(() => {
          // browser.sleep(4000);
          element(by.tagName('mat-form-field')).click().then(() => {
            // browser.sleep(3000);
            element.all(by.css('span.mat-option-text')).getText().then((values) => {
              element.all(by.css('span.mat-option-text')).filter((elem, index) => {
                return elem.getText().then((text) => {
                  return values[1] === text;
                });
              }).first().click();
              browser.sleep(2000);
            });
          });
        });
      });
});
<p>
  <mat-form-field>
    <mat-select [(value)]="selected">
      <mat-option>None</mat-option>
      <mat-option value="option1">Option 1</mat-option>
      <mat-option value="option2">Option 2</mat-option>
      <mat-option value="option3">Option 3</mat-option>
    </mat-select>
  </mat-form-field>
</p>

2 个答案:

答案 0 :(得分:0)

如果要在执行操作之前等待元素,则应使用:http://www.protractortest.org/#/api?view=ProtractorExpectedConditions.prototype.visibilityOf

element.all(by.css('span.mat-option-text')).getText().then((values) => {
  element.all(by.css('span.mat-option-text')).filter((elem, index) => {
    return elem.getText().then((text) => {
      return values[1] === text;
    });
  }).first().click();
});

这部分代码应被替换。 目前,您正在尝试对getText()执行ElementArrayFinder。您可以在ElementFinder上这样做。 此外,您要遍历那些ElementArrayFinder两次。 在filter()中,您定义的是index,但不要在任何地方使用它。索引是可选参数-如果您不打算使用它-忽略它。

values[1] === text;-如果您想选择option2,请尝试:

从“量角器”导入{浏览器,由元素};

describe('workspace-project App', () => {
  it('should select', () => {
    return browser.get('http://localhost:4200/test').then(() => {
      return element(by.tagName('mat-form-field')).click().then(() => {
        //add Expected Condition here
        return element(by.css('mat-option[value="option2"]')).click();
      });
    });
  });
});

答案 1 :(得分:0)

期望检查元素是否存在于页面的DOM上并且可见。可见性意味着不仅显示元素,而且其高度和宽度都大于0。这与“ invisibilityOf”相反。