Jasmine:Expect 没有得到实际值

Jasmine: Expect does not get actual value

这是第二部分:

我能够更好地重现它,所以我有:

expect((rfpPage.buttons.sendRequest).getAttribute('disabled')).toBe('true');

(rfpPage.inputs.firstName).sendKeys('Name');
(rfpPage.inputs.lastName).sendKeys('Surname');
(rfpPage.inputs.email).sendKeys('name@email.com');
(rfpPage.inputs.phone).sendKeys('1234312');
(rfpPage.inputs.company).sendKeys('Company');
(rfpPage.inputs.address).sendKeys('Leningrad Motorway');
(rfpPage.inputs.city).sendKeys('Moscow');
(rfpPage.inputs.postalCode).sendKeys('125171');
(rfpPage.inputs.eventName).sendKeys('Test Meeting');

expect((rfpPage.buttons.sendRequest).getAttribute('disabled')).toBe(null);

HTML: 未填写表格时:

<button type="submit" class="btn btn-lg btn-warning pull-right ng-binding" ng-disabled="!rfpForm.$valid || isWaitForRfp" disabled="disabled">Send Request
</button>

表格填写时:

<button type="submit" class="btn btn-lg btn-warning pull-right ng-binding" ng-disabled="!rfpForm.$valid || isWaitForRfp"> Send Request
</button>

应该发生什么:

第二个 expect 失败说 expect true 为 null。

这个测试在 3-4 台机器上本地运行良好,在多个浏览器上的 browserstack 上,在 saucelabs 上运行了几个月。

*现在:当它通过 Jenkins 在 BrowserStack 上执行时开始失败。 如果我 运行 在远程桌面计算机(从 Jenkins 执行测试的地方)上进行本地测试,它仍然 运行 没问题。在几台机器上本地它仍然 运行 没问题。在 BrowserStack 上本地 运行 没问题。 *

我这里有 Protractor 2.2.0 和 Jasmine 2.3.4

在我看来,控制流出了点问题,但这确实是非常奇怪的事情,我确实想明确地等待这个属性被删除,因为它会有所帮助,但看起来这不是正确的解决方案。

第二个样本:

    expect(contactInfoPage.selectors.contactInfoSection.companyName.isDisplayed()).toBe(false);
contactInfoPage.selectors.contactInfoSection.isCorporate.click();
expect(contactInfoPage.selectors.contactInfoSection.companyName.isDisplayed()).toBe(true);

DOM 点击前:

<input tabindex="11" type="text" ng-model="contactInfo.companyName" id="companyName" ng-required="isCorporateEvent" class="ng-valid-maxlength ng-touched ng-valid ng-valid-required" maxlength="80">

DOM 点击后:

<input tabindex="11" type="text" ng-model="contactInfo.companyName" id="companyName" ng-required="isCorporateEvent" class="ng-valid-maxlength ng-touched required ng-invalid ng-invalid-required" maxlength="80" required="required">

错误:期望 true 为 false

我实际上会使用 webdriver 提供的功能 - isEnabled() 检查。

根据 webdriver spec,在其逻辑中,它检查表单元素是否具有 disabled 属性:

Set enabled to false if a form control is disabled.

A form control is disabled if any of the following conditions are met:

  • The element is a button, input, select, or textarea element, and the disabled attribute is specified on this element (regardless of its value).
  • The element is a descendant of a fieldset element whose disabled attribute is specified, and is not a descendant of that fieldset element's first legend element child, if any.
expect(rfpPage.buttons.sendRequest.isEnabled()).toBe(true);

也许您只是想等到提交按钮恢复为可点击状态。你试过这个吗?

  var EC = protractor.ExpectedConditions;
  browser.wait(EC.elementToBeClickable($('button[type="submit"]')), 10000);

.IsEnabled() 应该有效。另外我推荐使用 elementexplorer 来快速找出结果